Spring中如何注冊bean和獲取bean
Spring5.x發布了,再次復習一下常用的注冊和獲取bean的方法。
1.基於xml配置注冊於獲取bean
2.半注解半xml方式
3.基於注解注冊與獲取bean
常用於獲取bean的類:
ClassPathXmlApplicationContext、
FileSystemXmlApplicationContext、
AnnotationConfigApplicationContext
1、基於xml配置
01、項目准備
建立一個Spring項目,在src/java目錄下創建pojo包,建立一個User類。
這里的構造方法、getter/setter方法,toString方法在xml配置中並不一定需要,但在基於注解的時候是必須的。
public class User {
private String name;
private Integer id;
private Integer age;
private String gender;
public User(String name, Integer id, Integer age, String gender) {
this.name = name;
this.id = id;
this.age = age;
this.gender = gender;
}
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", id=" + id +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
02、創建xml配置文件
在resourses目錄下創建ApplicationContext.xml
作為配置文件。
在其中注冊兩個bean,分別通過屬性和構造方法賦值。
<?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">
<bean id="user" class="com.pojo.User">
<property name="name" value="Jim"/>
<property name="age" value="19"/>
<property name="id" value="1000000"/>
<property name="gender" value="female"/>
</bean>
<bean id="user2" class="com.pojo.User">
<constructor-arg index="0" value="Tom"/>
<constructor-arg name="age" value="18"/>
<constructor-arg type="java.lang.Integer" value="100000"/>
<constructor-arg index="3" value="male"/>
</bean>
</beans>
03、獲取bean
使用ClassPathXmlApplicationContext
獲取bean.
@Test
public void test(){
//使用ClassPathXmlApplicationContext加載xml,默認從classpath下加載
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
User user = context.getBean(User.class);
System.out.println("bean:"+ user);
}
使用FileSystemXmlApplicationContext
獲取bean.
@Test
public void test2(){
//使用FileSystemXmlApplicationContext加載xml,可指定文件位置
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:ApplicationContext.xml");
User user2 = context.getBean("user2",User.class);
System.out.println("bean:"+ user2);
}
2、半注解半xml
這種還是需要配置文件完成部分操作。
01、創建xml配置文件
在resourses下創建Annotation.xml
作為配置文件。
兩個標簽分別代表開啟注解配置、掃描使用注解的包。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.pojo"/>
</beans>
02、使用注解注冊bean
在User上加入@Component
注解,代表加入IOC容器,使用 @Value
注解給字段賦值,可以在set方法上,也可以在字段名上。
@Component
注解默認id為類名小寫,也可以手動更改。
@Component
public class User {
@Value("Nike")
private String name;
private Integer id;
private Integer age;
private String gender;
@Value("19002")
public void setId(Integer id) {
this.id = id;
}
}
03、獲取bean
此時還有配置文件,所以還是從文件中獲取.
@Test
public void test3(){
//使用FileSystemXmlApplicationContext加載xml,可指定文件位置
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:Annotation.xml");
User user = context.getBean("user",User.class);
System.out.println("bean:"+ user);
}
3、基於注解
從Spring4開始,這種基於注解的開發被廣泛使用。
01、配置類
建立com.config包,在包下建立AppConfig.java。
在pojo包下建立Actor.java。
使用@Configuration
表明這是一個配置類,配置類具有xml文件具有的所有功能。
@ComponentScan
注解可以掃描包。
@Bean
注解代表這是一個bean,返回類型即bean類型。
@Import
注解可以把其他類注入當前配置中。
@Configuration
@Import({com.pojo.Actor.class})
@ComponentScan(basePackages = "com.pojo")
public class AppConfig {
@Bean
public User user2(){
return new User("Sally",190002,29,"female");
}
}
@Component
public class Actor {
@Value("Dave")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Actor{" +
"name='" + name + '\'' +
'}';
}
}
02、獲取bean
此時使用使用AnnotationConfigApplicationContext
獲取配置類。
@Test
public void test4(){
//使用AnnotationConfigApplicationContext獲取配置類
//ApplicationContext context = new AnnotationConfigApplicationContext("com.config");
ApplicationContext context = new AnnotationConfigApplicationContext(com.config.AppConfig.class);
User user = context.getBean("user",User.class);
System.out.println("bean:"+ user);
}
@Test
public void test5(){
//使用AnnotationConfigApplicationContext獲取配置類
ApplicationContext context = new AnnotationConfigApplicationContext(com.config.AppConfig.class);
Actor actor=context.getBean("actor", Actor.class);
System.out.println(actor);
}