Spring注解中@Configuration和@Configurable的区别
前言
今天在写注解时,不小心把@Configuration写成了@Configurable,这两个长得很像,所以顺便探究下,有什么区别。
@Configuration
该注解是可以用来替代XML文件。
以前我们配置bean时,都是写在applicationContext.xml文件中的。
有了这个注解后,我们就可以编写一个类在其上面加上该注解。即配置类。
在配置类中可以在方法上加@Bean注解定义其中的Bean
@Configurable
现在假设,我们想在非Spring管理的类中使用依赖注入;
比如:手动new出来的对象,正常情况下,Spring是无法依赖注入的,这个时候可以使用@Configurable注解;
现在假设我们有如下代码:
public class CarSalon {
//...
public void testDrive() {
Car car = new Car();
car.startCar();
}
}
@Component
public class Car {
@Autowired
private Engine engine;
@Autowired
private Transmission transmission;
public void startCar() {
transmission.setGear(1);
engine.engineOn();
System.out.println("Car started");
}
}
@Component
public class Engine {
//...
}
@Component
public class Transmission {
//...
}
代码运行时,会把Null异常。因为正常情况下,Spring无法对new出来的对象进行依赖注入;
在此基础上,我们使用@Configurable注解进行修改,如下:
@Configurable(preConstruction = true)
@Component
public class Car {
@Autowired
private Engine engine;
@Autowired
private Transmission transmission;
public void startCar() {
transmission.setGear(1);
engine.engineOn();
System.out.println("Car started");
}
}
讲解:
@Configurable(preConstruction = true) 这个注解的作用是:
告诉Spring在构造函数运行之前将依赖注入到对象中。
使用该注解需要注意的地方:
① 需要在项目中添加如下jar包:aspectj-x.x.x.jar, aspectjrt.jar, aspectjveawer-x.x.x.jar
② 将基于Spring的java代理添加到运行配置中:-javaagent:"PATH\spring-instrument-x.x.x.jar"
现在,运行就不会报错了。
参考地址:
Spring dependency injection – @Configurable
Spring framework @Configurable vs @Configuration
————————————————
原文链接:https://blog.csdn.net/u013066244/article/details/89061676
Spring注解中@Configuration和@Configurable的区别相关推荐
- Spring框架中ApplicationContext与BeanFactory的区别
前言 Spring框架中ApplicationContext与BeanFactory的区别.其中,BeanFactory为ApplicationContext的父类,是一种继承关系,Applicati ...
- spring boot 中@Mapper和@Repository的区别
一:前言 @Mapper和@Repository是常用的两个注解,两者都是用在dao上,两者功能差不多,容易混淆,有必要清楚其细微区别: 二:区别 @Repository需要在Spring中配置扫描地 ...
- Spring Boot中Configuration problem: Cannot locate BeanDefinitionParser for element 的问题分析
环境信息 Spring Boot 2.0.2 JDK 8, OS: windows 7 问题的提出 今天在开发中,碰到一下类似的错误信息: 15:44:09.198 INFO com.jd.ai.cv ...
- 理解Spring Security中permitAll()和anonymous()的区别
从 Spring文档: 采用"默认拒绝"通常被认为是良好的安全实践,您可以明确指定允许的内容并禁止其他所有内容.定义未经身份验证的用户可以访问的内容是类似的情况,尤其是对于 Web ...
- spring security中Authority、Role的区别
最近在研究spring security时,大概研究了一下Authority.Role之间到底有什么本质的区别. 如果你使用的是hasRole方法来判断你的登录用户是否有权限访问某个接口,那么你初始化 ...
- Spring框架中IOC和DI的区别
IOC:全称Inversion of Control,中文释义为控制反转. 简单地说,IOC就是把对象的实例化工作交由Spring容器来完成.IOC可以说是一种思想,传统的应用程序是我们自己去创建(n ...
- Spring 注解之@RestController与@Controller的区别
https://www.cnblogs.com/east7/p/10462279.html
- spring注解 声明式事务
在spring注解中,使用声明式事务,需要用到两个核心的注解:@Transactional注解和@EnableTransactionManagement注解.将@Transactional注解加在方法 ...
- EVCache缓存在 Spring Boot中的实战
2019独角兽企业重金招聘Python工程师标准>>> 文章共 727字,阅读大约需要 2分钟 ! 概 述 EVCache 是 Netflix开源的分布式缓存系统,基于 Memcac ...
最新文章
- 万字长文,理解Elasticsearch和面试总结
- 优质的空间服务商对网站优化的重要性
- webApp之meta标签
- Jenkins持续集成环境之tomcat的安装和配置
- 方程的根的个数C语言xtu_零度根轨迹的绘制及情况讨论、以及参数根轨迹的原理介绍...
- 喜提 redir contributor
- HDU 3530 Subsequence
- Maven之自定义pom类型的基础项目
- java 对象 序列化 文件中_如何将一个java对象序列化到文件里
- mysql改原始密码mac_MAC版修改MySQL初始密码的方法
- php 什么函数获取ip,在PHP中获取ip地址的方法有哪些
- 免费证书https://lamp.sh/ssl.html
- !!!SQL sever 函数表达
- 圆台下料展开计算方法_冲压件展开计算方法(二),转发给每一位冲压人
- 解决Maven下载慢的问题
- 《网络工程师教程(第五版)》大纲及与第四版比较
- VMWare station 14密钥
- kali2020.3 安装IDA freeware
- win7计算机属性里面的图标变白,Win7系统桌面图标白边如何解决
- 计算机课程教学调查问卷,《初中生信息技术课程学习现状调查问卷》分析报告...
热门文章
- 23行代码_动图展示——快排详解(排序最快的经典算法)
- mysql5.5安装最后一步一直无反应_【MATLAB R2019b】保姆级安装教程
- java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘
- 点击打印出现IE已经阻止此站点用不安全方式使用 ActiveX 控件解决方
- 语言设计谁年龄大_这桌子谁设计的?脑洞够大,除能360°翻转,打台球,乒乓球都行...
- 怎么获取web开发怎么获取手机的唯一标识_PYTHON实现北京住宅小区数据抓取-(Web服务API-地点检索服务)
- 基于spring cloud 的灰度发布实践_【收藏】基于spring cloud灰度发版方案
- mysql子查询sysdate_Oracle向MySQL 迁移相关事项
- python两个列表合并 从小到大排列_Python对两个有序列表进行合并和排序的例子...
- linux脚本 set env,linux 中 set,env,export,declare显示shell变量的区别