@Configuration和@Bean
1、简介
我们要想给Spring注入自己的bean,我们可能需要写配置文件,然后指定bean标签,还可能利用property给属性赋值等操作。总之离不开配置文件。
2、项目结构
image.png
3、配置文件的方式
3.1、实体类
package com.chentongwei.spring.annotation.configuration.entity;/**
* @Description:
* @author TongWei.Chen 2018-06-29 14:27:43
* @Project spring-annotation
*/public class User { private String name; private Integer age; public String getName() { return name;
} public void setName(String name) { this.name = name;
} public Integer getAge() { return age;
} public void setAge(Integer age) { this.age = age;
} public User() {
} public User(String name, Integer age) { this.name = name; this.age = age;
} @Override
public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}3.2、配置文件
<?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"> <beans> <bean id="user" class="com.chentongwei.spring.annotation.configuration.entity.User"> <property name="age" value="12" /> <property name="name" value="张三" /> </bean> </beans></beans>
3.3、测试类
package com.chentongwei.spring.annotation.configuration;import com.chentongwei.spring.annotation.configuration.entity.User;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/**
* @author TongWei.Chen 2018-06-29 14:29:59
* @Description:
* @Project spring-annotation
*/public class MainXmlTest { private static final String CONFIG = "classpath:configuration/beans.xml"; public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(CONFIG);
User user = applicationContext.getBean("user", User.class);
System.out.println(user);
}
}3.4、输出结果
User{name='张三', age=12}PS:
不做过多解释,因为这是我们大家最为熟悉的一种方式,xml配置文件的方式。
4、注解的方式
4.1、简介
我们完全可以利用@Configuration和@Bean这两个注解来搞定上面的配置文件。
4.2、实体类
同上述配置文件的【User】
4.3、主配置类
package com.chentongwei.spring.annotation.configuration.config;import com.chentongwei.spring.annotation.configuration.entity.User;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/**
* @Description: 配置类(@Configuration),等同于spring配置文件
*
* @author TongWei.Chen 2018-06-29 14:33:15
* @Project spring-annotation
*/@Configurationpublic class MainConfig { /**
* @Bean: 给容器中注册一个bean,bean的类型为返回值类型,id默认为方法名
* 类似于配置文件的
* <bean id="user" class="com.chentongwei.spring.annotation.configuration.entity.User" />
*
* @return
*/
@Bean
public User user() { return new User("李四", 20);
}
}PS:
1、@Configuration:告诉Spring,被@Configuration注解修饰的类都是配置类,等同于你写一份spring的配置文件。
2、@Bean:告诉Spring我这是一个等待被注册的bean,相当于配置文件的<bean></bean>标签。
2.1、bean的类型就是方法的返回值类型。
2.2、bean的id默认就是方法名。
2.3、可以通过@Bean()的value属性指定bean的id,比如@Bean(“user01”)
3、@Bean只能在被@Configuration所修饰的类中才会生效。就好比你只有在spring配置文件里写<bean>标签才会管用,在普通的xml文件里写不管用。
4.4、测试类
package com.chentongwei.spring.annotation.configuration;import com.chentongwei.spring.annotation.configuration.config.MainConfig;import com.chentongwei.spring.annotation.configuration.entity.User;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/**
* @author TongWei.Chen 2018-06-29 14:36:50
* @Description:
* @Project spring-annotation
*/public class MainAnonationTest { public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
User user = applicationContext.getBean("user01", User.class);
System.out.println(user);
}
}
作者:编程界的小学生
链接:https://www.jianshu.com/p/e9391032bb3b
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
