001Spring注解@Configuration和@Bean
@Configuration和@Bean
1、简介
我们要想给Spring注入自己的bean,我们可能需要写配置文件,然后指定bean标签,还可能利用property给属性赋值等操作。总之离不开配置文件。
2、项目结构
image.png3、配置文件的方式
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
*/
@Configuration
public 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);
}
}
PS:
注意这里是AnnotationConfigApplicationContext而不是xml了。
4.5、输出结果
User{name='李四', age=20}
5、广告
-
码云点star,万分感谢!
代码已经上传到码云了
https://gitee.com/geekerdream/spring-anonation
通用的权限处理框架
https://gitee.com/geekerdream/common-security
通用的异常处理
https://gitee.com/geekerdream/exception-handler
通用的发送邮件
https://gitee.com/geekerdream/common-boot-email
陆续会推出更多干货,希望关注!
-
QQ群【Java初学者学习交流群】:458430385
-
微信公众号【Java码农社区】
- 今日头条号:编程界的小学生