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 ...
随机推荐
- Winform多线程访问UI控件问题
Winform多线程无法访问UI控件,考虑使用委托方法解决.
- 熟悉Hadoop及其操作 3
启动hdfs 查看与创建hadoop用户目录. 在用户目录下创建与查看input目录. 将hadoop的配置文件上传到hdfs上的input目录下.运行MapReduce示例作业,输出结果放在ou ...
- down_interruptible()获取信号量
信号量(Semaphore)是操作系统中最典型的用于同步和互斥的手段,信号量的值可以是0.1或者n.信号量与操作系统中的经典概念PV操作对应. P(S):①将信号量S的值减1,即S=S-1:②如果S≥ ...
- 使用generator进行代码自动生成
在使用generator 进行逆向工程时,一下为步骤 添加mybatis generator的maven插件依赖 添加mybatis generator的配置文件:generatorConfig.xm ...
- C语言程序设计基础 实验3 函数
C语言程序设计基础 实验3 函数 一.实验目的 1. 理解函数的本质:模块化,实现代码复用 2. 掌握函数定义.声明.调用的语法 3. 理解并掌握函数的形参.实参,以及函数调用和返回的过程 4. ...
- Nginx重启操作
1.杀掉Nginx进程 killall nginx 2.启动Nginx /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/ng ...
- LINUX下的VSCODE-C/C++配置
LINUX下的VSCODE-C/C++配置 1.生成默认的任务文件 2.lunch.json,调整"configurations"里的成员,如下 ①添加 "preLaun ...
- windows音频设备图像隔离audiodg.exe占用内存高(停止与重启audiodg服务)
首先想到的办法是结束该进程,于是在任务管理器里结束进程后,内存是释放了,但是发现发现电脑没有声音去到电脑的system32目录下双击audiodg.exe后任然没有声音解决方法如下(重启audiodg ...
- win 11 VMware workstations b不可恢复的错误(vcpu-2)
首先检查一下电脑有没有开启CPU虚拟化,我的已经开启了,按照百度的方法去控制面板卸载程序里面,找到VMware 右击更改 弹出的安装程序点修复,,结果修复出错了,显示写入文件D:\vm\glib-2. ...
- MySQL根据经纬度和距离查询最近的数据
[lat]:输入的纬度 [lon]:输入的经度 [distance]:查询距离内的数据,单位m SELECT * FROM ( SELECT id lon, lat, vin, ROUND( 6378 ...