Spring中@Configuration的使用


@Configuration的作用

  @Configuration主要是用來定於定義配置類,可用於代替xml配置文件。

一、@Configuation加載Spring方法

1.1、@Configuration配置spring並啟動spring容器

@Configuration標注在類上,相當於把該類作為spring的xml配置文件中的<beans>,作用為:配置spring容器(應用上下文)

@Configuration
public class MyConfigtion {
public MyConfigtion(){
System.out.println("容器初始化!!!!!!!!!!!!");
}
}

相當於:

<?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="myConfigtion" class="springclouddemo.springconfigtion.configtion.MyConfigtion"></bean>
</beans>

主方法進行測試:

public class TestConfigution {
public static void main(String[] args) {
// ApplicationContext applicationContext=new AnnotationConfigApplicationContext(MyConfigtion.class);
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-context.xml");
MyConfigtion myConfigtion = (MyConfigtion)applicationContext.getBean("myConfigtion");
}
}

從運行主方法結果可以看出,spring容器已經啟動了:

 

 

 

1.2、@Configuration啟動容器+@Bean注冊Bean

@Bean標注在方法上(返回某個實例的方法),等價於spring的xml配置文件中的<bean>,作用為:注冊bean對象

bean類:

public class UserBean {
private String username;
private String password;
public UserBean(){
System.out.println("Bean的實例化");
}
public UserBean(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public String getPassword() {
return password;
}

public void setUsername(String username) {
this.username = username;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "UserBean{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}';
}
public void say(){
System.out.println("說的好!!!!!!!");
}

}

配置類:

@Configuration
public class MyConfigtion1 {
public MyConfigtion1(){
System.out.println("容器初始化!!!!!!!!!!!!");
}
@Bean
public UserBean userBean(){
return new UserBean();
}
}

主方法測試類:

public class TestConfigution {
public static void main(String[] args) {
ApplicationContext applicationContext=new AnnotationConfigApplicationContext(MyConfigtion1.class);
UserBean userBean = (UserBean)applicationContext.getBean("userBean");
userBean.say();
/* ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-context.xml");
MyConfigtion myConfigtion = (MyConfigtion)applicationContext.getBean("myConfigtion");*/
}
}

結果:

注: 
(1)、@Bean注解在返回實例的方法上,如果未通過@Bean指定bean的名稱,則默認與標注的方法名相同; 
(2)、@Bean注解默認作用域為單例singleton作用域,可通過@Scope(“prototype”)設置為原型作用域; 
(3)、既然@Bean的作用是注冊bean對象,那么完全可以使用@Component、@Controller、@Service、@Ripository等注解注冊bean,當然需要配置@ComponentScan注解進行自動掃描。

1.3、@Configuration啟動容器+@Component注冊Bean

bean類:

@Component
public class UserBean {
private String username;
private String password;
public UserBean(){
System.out.println("Bean的實例化");
}
public UserBean(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public String getPassword() {
return password;
}

public void setUsername(String username) {
this.username = username;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "UserBean{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}';
}
public void say(){
System.out.println("說的好!!!!!!!");
}

}

配置類:

@Configuration
@ComponentScan(basePackages = "springclouddemo.springconfigtion")
public class MyConfigtion1 {
public MyConfigtion1(){
System.out.println("容器初始化!!!!!!!!!!!!");
}
/*@Bean
public UserBean userBean(){
return new UserBean();
}*/
}

主方法測試獲取bean對象:

public class TestConfigution {
public static void main(String[] args) {
ApplicationContext applicationContext=new AnnotationConfigApplicationContext(MyConfigtion1.class);
UserBean userBean = (UserBean)applicationContext.getBean("userBean");
userBean.say();
/* ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-context.xml");
MyConfigtion myConfigtion = (MyConfigtion)applicationContext.getBean("myConfigtion");*/
}
}

 @Configuation等價於<Beans></Beans>

 @Bean等價於<Bean></Bean>

 @ComponentScan等價於<context:component-scan base-package="com.dxz.demo"/>

 

二、組合多個配置類

2.1、在@configuration中引入spring的xml配置文件

@Configuration
@ImportResource("classpath:spring-context.xml")
public class MyConfigtion2 {

}

bean類:

public class UserBean1 {
private String username;
private String password;
public UserBean1(){
System.out.println("Bean的實例化");
}
public UserBean1(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public String getPassword() {
return password;
}

public void setUsername(String username) {
this.username = username;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "UserBean{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}';
}
public void say(){
System.out.println("說的好!!!!!!!");
}

}

測試類:

public class TestConfigution {
public static void main(String[] args) {
ApplicationContext applicationContext=new AnnotationConfigApplicationContext(MyConfigtion2.class);
UserBean1 userBean1 = (UserBean1)applicationContext.getBean("userBean1");
userBean1.say();
/* ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-context.xml");
MyConf3 qweigtion myConfigtion = (MyConfigtion)applicationContext.getBean("myConfigtion");*/
}
}

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <bean id="myConfigtion2" class="springclouddemo.springconfigtion.configtion.MyConfigtion2"></bean>
 <bean id="userBean1" class="springclouddemo.springconfigtion.po.UserBean1"></bean>
</beans>

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM