Spring完全注解开发
注解的好处:如果管理很多的Bean,要求这些Bean都配置在applocationContext.xml文件中。用了注解之后,就不需要在xml文件中配置了,Spring提供了几个辅助类会自动扫描和装配这些Bean。所以大大减少了xml文件的体积,Spring会根据配置去扫描某些包里面的类,得到类的方法或注解,不同的注解会进行不同的操作。
@Configuration
这个注解一般的来说,用在类上面,加上这个注解的类可以成为一个spring的xml配置文件,使用的是java代码的配置
//配置Spring装载类
//Configurable 指定此类为Spring配置类。作为配置类,替代XML配置文件
//ComponentScan 指定Bean范围(注解范围),扫描装载
@Configurable
@ComponentScan(basePackages = {"com.minelsh"})
public class springConfig {
}
创建对象的注解
Spring中作用在作用类上的注解有@Component注解和三个衍生注解:@Responsity @Service和@Controller
三个衍生注解的说明:
@Controller:通常用于Controller类,也就是控制层(MVC)。
@Service:通常用于Service类,也就是服务层。
@Repository:通常用于DAO类,也就是持久层。
当注解在作用类上时,表明这些类似交给Spring容器进行管理的。
@Component注解的使用
@Component("conversionImpl")
//其实默认的spring中的Bean id 为 conversionImpl(首字母小写)
public class ConversionImpl implements Conversion {
}
案例1:
不指定bean的名称,默认为类名首写小写字母
@Component
public class University {
to do sthing...
}
获取bean方式:
ApplicationContext ctx = new
ApplicationContext context = new AnnotationConfigApplicationContext(Bean配置类);
University ust = (University) ctx.getBean("university");
案列2:
指定bean的名称
@Component("university1")
public class University {
to do sthing...
}
获取bean方式:
ApplicationContext ctx = new
ApplicationContext context = new AnnotationConfigApplicationContext(Bean配置类);
University ust = (University) ctx.getBean("university1");
在构造器上的注解
@Autowired :根据类型(ByType)来自动匹配(核心注解)
这个注解可以用于属性,setter方法,还有构造器上,这个注解用于注入依赖的对象。当再一个属性上加上@Autowired注解,有时可能要指定一些额外的值,Spring然后会自动的将值赋给这个属性。
案例1:作用在构造器上
public class MovieRecommender {
private final CustomerPreferenceDao customerPreferenceDao;
@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
案列2:使用在setter方法上
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Autowired
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}
案列3:使用在域属性上
public class MovieRecommender {
private final CustomerPreferenceDao customerPreferenceDao;
@Autowired
private MovieCatalog movieCatalog;
@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
案列4:使用在任意方法名和产生的普通方法上
public class MovieRecommender {
private MovieCatalog movieCatalog;
private CustomerPreferenceDao customerPreferenceDao;
@Autowired
public void prepare(MovieCatalog movieCatalog,
CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
案列5:使用在域属性数组上
public class MovieRecommender {
@Autowired
private MovieCatalog[] movieCatalogs;
// ...
}
案列6:使用在集合类型上
public class MovieRecommender {
private Set<MovieCatalog> movieCatalogs;
@Autowired
public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) {
this.movieCatalogs = movieCatalogs;
}
// ...
}
@Qualifier
这个注解和@Autowired一起使用,当想对注入的过程做更多的控制,@Qualifier可以帮助指定做更详细的配置。一般在两个或多个bean是相同的类型,spring在注入的时候会出现混乱
例如有个接口叫做Hellointerface,然后两个bean都实现了Hellointerface接口
@Component
public class Bean1 implements HelloInterface {
//
}
@Component
public class Bean2 implements HelloInterface {
//
}
如果只使用@Autowired注解,Spring就不知道到底要注入哪一个bean。解决办法就是加上@Qualifier注解
@Component
public class BeanA {
@Autowired
@Qualifier("bean2")
private HelloInterface dependency;
...
@Resource:根据类型和名称(ByType & ByName)来自动匹配(核心注解)
@Resource和@Autowired注解都是用来实现依赖注入的。只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。
@Resource有两个重要属性,分别是name和type
spring将name属性解析为bean的名字,而type属性则被解析为bean的类型。所以如果使用name属性,这使用ByName的自动注入策略,如果使用Type类型则使用ByTyoe的自动注入策略。如果都没有指定,则听过反射机制使用ByName自动注入策略。
案列1:使用@Resource注解
@Resource(name="bucket")
private String bucketName;
@Resource(name="style")
private String styleName;
翻译为xml模式来看
<bean name="bucket" class="java.lang.String">
<constructor-arg value="${oos.bucketName}"/>
</bean> <bean name="style" class="java.lang.String">
<constructor-arg value="${oos.styleName}"/>
</bean>
Spring完全注解开发的更多相关文章
- Spring _day02_IoC注解开发入门
1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...
- spring原始注解开发-01
我们使用xml-Bean标签的配置方式和注解做对比理解 1.创建UserDao接口以及UserDao的实现类UserDaoImpl(接口代码省略) public class UserDaoImpl i ...
- Spring使用注解开发及使用java类进行配置bean
Spring使用注解开发 说明 在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0& ...
- Spring基于注解开发异常
基于注解开发: 一开始:用的jar包: 百度查到: 导入aop包: 没用 有的说: Spring版本和jdk版本不匹配 于是我换成了4.0版本 导入的jar包: 还是报错. 解决办法:添加spring ...
- spring——使用注解开发
注意:spring4之后,使用注解开发需要导入AOP包org.springframework:spring-aop:5.2.5.RELEASE以及context约束,增加注解的支持 <?xml ...
- Spring MVC注解开发入门
注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...
- Spring原始注解开发-02
使用@Repository.@Service.@Controller注解配置,使其更加清晰属于哪一层,因为我是模拟的web层,所有没有使用@Controller注解,后面结合web开发会使用到 1.创 ...
- spring @Validated 注解开发中使用group分组校验
之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...
- Spring基于注解开发的注解使用之AOP(部分源代码分析)
AOP底层实现动态代理 1.导入spring-aop包依赖 <!--aopV1--> <dependency> <groupId>org.springframewo ...
- Spring MVC 注解开发详解
@Controller控制器定义 1.Controller是单利模式,被多个线程请求共享,因此设计成无序状态. 2.通过@controller标注即可将class定义为一个controller类.为使 ...
随机推荐
- Android Qcom USB Driver学习(八)
因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧 BAT SCH (1)VBATT_VSNS_P (2)BAT_THERM (3)I2C_SDA (4)I2 ...
- ARM SMMU的原理与IOMMU
首先放一个社区iommupatch的网址:https://lore.kernel.org/linux-iommu/ 1: arm smmu的原理 1.1: smmu 基本知识 如上图所示,smmu 的 ...
- Android Qcom USB Driver学习(零)
该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) 文章标题 文章链接 文章简介 Android Qcom USB Driver学习(零) https://b ...
- js有效括号匹配
// 定义一个括号映射 const bracketMap = [ { left: '[', right: ']' }, { left: '<', right: '>' }, { left: ...
- 介绍this指向问题
this是js底层定义的变量,代表了代码的指向环境 a 函数的this是window b 方法的this是调用的对象 c 构造函数和原型对象上的方法的this指向实例化对象 d 箭头函数不会自己创建t ...
- 封装 axios 拦截器
import axios from "axios"; // 自定义一个 request 实例 const request = axios.create({ baseURL: &qu ...
- 9.23 csp
今天模拟赛出了四道zroi的题,挺GG的. T1.奇观 因为删除的边比较少,所以从m入手,f[i][j]表示长度为i,终点为j的链的方案数. C 是长度为3的链,F是 1条 长度为3 的链 和 2条 ...
- Notification Manager 2.0.0 发布:新增飞书通知、通知路由、通知静默
Notification Manager 是 KubeSphere 可观测团队开源的一款 Kubernetes 平台上的多租户通知管理系统,其从 Kubernetes 接收告警.事件.审计,根据用户设 ...
- costmap代价地图
1 什么是costmap代价地图 在机器人进行路径规划时,我们需要明白规划算法是依靠什么在地图上来计算出来一条路径的.依靠的是gmapping扫描构建的一张环境全局地图,但是仅仅依靠一张原始的全局地图 ...
- NES 名词解释
本文介绍了 NES(FC.红白机.小霸王)中一些名词或者术语,主要与 PPU 有关. Tile 8x8 像素图像.每像素 2 比特, 共 16 字节大小.每个像素可以使用 4 种颜色. Sprite ...