spring01-组件注册-@Configuration&@Bean给容器中注册组件

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

Spring底层重要的是IOC和DI,我们所谓的控制反转和依赖注入,在spring认为,所有的组件都应放在IOC容器中,组件之间的关系通过容器自动装配,也就是所说的依赖注入。

接下来我们来看用纯注解的方式完成容器组件注册,管理以及依赖功能

创建一个maven工程

在maven仓库找到spring context ,以4.3.12版本为例,现在很重视版本的使用了,前两天在服务器上装个miongo库,将38库的数据迁移到40库mongo版本为4.0.4,安装的为3.2版本的,结果导数据导入时一部分导入不进去。就很烦,重新卸载安装,安装的时候通过yum源安装,在/etc/yum.repos.d/里面两个版本,没有安装上4.0.4版本的,卸载的时候也出现的各种问题,耽误了很长时间,因为数据库也很大,有一个有14G的数据量,结果就导了一整天。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.liuyuan</groupId>
	<artifactId>spring-annotation</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.12.RELEASE</version>
		</dependency>
	</dependencies>

</project>
package com.liuyuan.bean;

public class Person {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person() {
		super();
	}
	
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- class = "",输入person alt+/ 会提示 -->
	<bean   class="com.liuyuan.bean.Person"></bean>
	
	
	<bean   class ="com.liuyuan.bean.Person">
	<!-- 这里的name="",也可以使用快捷键alt+/ -->
		<property name="age" value="18"></property>
		<property name="name" value = "zhangsan"></property>
	</bean>
	
</beans>
package com.liuyuan;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.liuyuan.bean.Person;

public class MainTest {

	public static void main(String[] args) {
		 ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml");
		 Person person = (Person)applicationContext.getBean("person");
		 System.out.println("person="+person);
		 
		 Person person2 = (Person)applicationContext.getBean("person2");
		 System.out.println("person2="+person2);
	}

}

用配置类的形式注入Bean

package com.liuyuan.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.liuyuan.bean.Person;

//配置类等同于之前的配置文件
@Configuration  //告诉spring这是一个配置类
public class MainConfig {
	//给容器注册一个Bean,类型为返回值得类型,
	///id默认是以方法名作为id
	@Bean("AAA") 
	public Person person() {
		return new Person("lisi",20);
	}
}
package com.liuyuan;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.liuyuan.bean.Person;
import com.liuyuan.config.MainConfig;


public class MainTest {

	public static void main(String[] args) {
		 //ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml");
		 //Person person = (Person)applicationContext.getBean("person");
		 //System.out.println("person="+person);
		 
		 //Person person2 = (Person)applicationContext.getBean("person2");
		 //System.out.println("person2="+person2);
		
		//用一种新的方式来注入  MainConfig.class 配置类
		ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
		Person person = applicationContext.getBean(Person.class);
		System.out.println("person="+person);
		
		//applicationContext.getBeanDefinitionNames();
		//Person组件在ioc容器名字是什么 
		String[] nameForType = applicationContext.getBeanNamesForType(Person.class);
		for (String name : nameForType) {
			//这个name是在配置类的Bean("AAA"),那么name就是AAA
			//不指定则为加@Bean注解的方法名
			System.out.println(name);
		}
	}

}

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看