@Configuration的作用
@Configuration主要是用来定于定义配置类,可用于代替xml配置文件。
@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文)
<beans>
@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容器已经启动了:
@Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的<bean>,作用为:注册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注解进行自动扫描。
@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对象:
@Configuation等价于
@Bean等价于
@ComponentScan等价于<context:component-scan base-package="com.dxz.demo"/>
@Configuration @ImportResource("classpath:spring-context.xml") public class MyConfigtion2 { }
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>
原文链接:https://www.cnblogs.com/xiaofuzi123456/p/12326269.html