SpringBoot2:@Configuration 注解
@Configuration 这个注解的作用,告诉 springboot 这是一个配置类。配置类以及类里的方法都可以作为Bean。里面的方法用@Bean标记。
@Configuration 替换了繁琐的 bean.xml 配置文件,早期的 bean.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 name="user01" class="com.itheima.bean.User">
<property name="name" value="zhangsan"/>
<property name="age" value="18"/>
<property name="pet" value="Pet"/>
</bean> <bean name="Pet" class="com.itheima.bean.Pet">
<property name="name" value="tom"/>
</bean>
</beans>
@Configuration 包含 proxyBeanMethods 字段,其作用:是否返回单例模式,默认值是 true。
@Configuration(proxyBeanMethods=”false”) 则不检测直接返回新实例。使用时注意要先指定代理 Bean,然后多次调用 Bean 的方法,看返回值是否相等
// @Configuration(proxyBeanMethods = false)
Full模式:@Configuration默认使用Full模式,使用前检测是否存在实例,保证单例模式。适用于Bean之间存在依赖的情况
Lite模式:@Configuration(proxyBeanMethods = false)代表轻量模式,不检测直接返回结果。适用于Bean之间不存在依赖的情况
实例1:
需求:写两个JavaBean,用@Configuration,将Bean装入容器。并通过 @Configuration(proxyBeanMethods=”false”) 验证返回结果是否来自同一个实例。
结构目录:

写两个 Bean,user 和 pet。
package com.itheima.bean;
public class Pet {
String name;
public Pet() {
}
public Pet(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pet{" +
"name='" + name + '\'' +
'}';
}
}
package com.itheima.bean;
public class User {
String name;
int age;
Pet pet;
public User() {
}
public User(String name,int age) {
this.name = name;
this.age = age;
}
public User(String name, int age, Pet pet) {
this.name = name;
this.age = age;
this.pet = pet;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", pet=" + pet +
'}';
}
}
Bean的配置类:MyConfig.java,通过@Configuration和@Bean指定装配Bean
@Configuration(proxyBeanMethods = false)
public class MyConfig {
@Bean
public User user01(){ User zhangsan = new User("zhangsan", 18);
// zhangsan.setPet(pet01());
return zhangsan;
}
@Bean("tom")
public Pet pet01(){
return new Pet("tom");
}
}
测试代码:将 MyConfig.java 作为 Bean,将 @Configuration(proxyBeanMethod=false),多次调用 Bean 的方法,比较返回对象是否相等。
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run =
SpringApplication.run(MainApplication.class, args);
// String[] names = run.getBeanDefinitionNames();
// for (String name : names) {
// System.out.println(name);
// } //这个ProxyBeanMethod居然是先代理MyConfig这个bean,
// 再用bean调用其方法,测试bean的方法返回是否相等,我的天! MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
User user1 = bean.user01();
User user2 = bean.user01();
System.out.println(user1==user2); // 哥直接用run获取对应的 user01 bean,难怪反复测试都返回true
// User user01 = run.getBean("user01", User.class);
// User user02 = run.getBean("user01", User.class);
// System.out.println(user02==user01);
}
}
结果:false。因为 MyConfig 标记的注解是 @Configuration(proxyBeanMethods = false) 。
SpringBoot2:@Configuration 注解的更多相关文章
- SpringBoot2.0之@Configuration注解
SpringBoot2.0之@Configuration注解 本文转载自:https://www.javaman.cn/sb2/springboot-configuration 前面我们介绍了Spri ...
- springboot情操陶冶-@Configuration注解解析
承接前文springboot情操陶冶-SpringApplication(二),本文将在前文的基础上分析下@Configuration注解是如何一步一步被解析的 @Configuration 如果要了 ...
- [转]Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
1.@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文) package com.test.s ...
- Spring boot之SpringApplicationBuilder,@@Configuration注解,@Component注解
SpringApplicationBuilder: 该方法的作用是可以把项目打包成war包 需要配置启动类,pom.xml文件等,具体见:http://blog.csdn.net/linzhiqian ...
- Spring注解-@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
1.@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文) package com.test.s ...
- spring和springmvc中,Configuration注解Bean重复加载
问题:bean重复加载1.如下代码所示,开启Configuration注解,实现Bean代码注入,发现bean重复加载 @Configuration public class EhCacheConfi ...
- Spring5源码深度解析(一)之理解Configuration注解
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.Spring体系结构 ...
- SpringBoot学习之@Configuration注解和@Bean注解
@Configuration 1.@Configuration注解底层是含有@Component ,所以@Configuration 具有和 @Component 的作用. 2.@Configurat ...
- 【记录】@Configuration注解作用 mybatis @Param作用
参考地址: 1:https://www.cnblogs.com/duanxz/p/7493276.html 2:https://www.wandouip.com/t5i91156/ 3:https:/ ...
- 配置类为什么要添加@Configuration注解呢?
配置类为什么要添加@Configuration注解呢? 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读 | 总结篇 Spring ...
随机推荐
- Python人脸识别——电脑摄像头检测人脸与眼睛
##10 电脑摄像头检测人脸与眼睛 import cv2 #检测图片 def detect(frame): #灰度化图片,减少运算量 #img = cv2.cvtColor(frame ...
- 2020ccpc威海C.Rencontre题解(树形dp)
题目大意:给定一棵带边权树,给三份点的集合U1,U2,U3,求0.5*(E(dis(u1,u2))+E(dis(u1,u3))+E(dis(u2,u3))). 即,我们需要维护两份点的所有距离和.显然 ...
- Winform多线程访问UI控件问题
Winform多线程无法访问UI控件,考虑使用委托方法解决.
- idea :不支持发行版本11问题
1.因为我是导入的其他人的项目来进行修改的,所以遇到了这个问题 2. 3. 4.
- tortoiseGit配置和git常用命令
tortoiseGit配置:https://blog.csdn.net/hjwdz2015/article/details/90487554 常用命令 一.git config --global us ...
- porps传参
porps传参(最常用的 布尔传值)(基于前面的步骤进行修改) ①index.js //定义动态路由 props:trueconst routes =[ {path:"/user/:id/: ...
- CSS3之伸缩布局
一 主轴方向 在伸缩布局中, 默认伸缩项是从左至右的排版的 主轴的排版的方向默认就是row, 默认就是从左至右 1.默认情况下主轴是水平方向的, 但是也可以修改为垂直方向.只要看到flex-direc ...
- CH573 CH582 CH579蓝牙从机(peripheral)例程讲解四(蓝牙动态广播)
动态广播有两种实现方式: 1.关闭广播,更改广播包数据,等待关闭上报状态后,开启广播. uint8_t initial_advertising_enable = FALSE; GAPRole_SetP ...
- NX1946_MoldWizard 注塑模向导建立标准库
NX1946_MoldWizard 注塑模向导建立标准库
- 配置tlpi_hdr.h 头文件《linux系统编程》(转载)
https://www.cnblogs.com/pluse/p/6296992.html#:~:text=tlpi_hdr.h%E6%96%87%E4%BB%B6%E5%88%99%E5%8C%85% ...