spring-第十三篇之零配置支持
1、搜索bean类,使用注解标注spring bean。
@Component:标注一个普通的spring bean类
@Controller:标注一个控制器组件类(Java EE组件)
@Service:标注一个业务逻辑组件类(Java EE组件)
@Repository:标注一个DAO组件类(Java EE组件)
普通bean在使用@Component注解后,还需要在配置文件中配置这些bean的搜索路径。
引入命名空间:xmlns:context="http://www.springframework.org/schema/context"
引入元素:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
指定搜索bean注解路径:
<context:component-scan
base-package="com.lfy.bean"/>
举个例子:
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 自动扫描指定包及其子包下的所有Bean类 -->
<context:component-scan base-package="com.lfy.bean"/>
</beans>
基于注解模式下,bean实例的名称默认是bean类的首字母小写,其他都不变。当然spring也支持在添加注解的时候指定bean实例的名称,如@Component("chinese")。
除此之外,还可以通过<component-scan.../>元素添加<include-filter.../>或<exclude-filter.../>子元素来指定spring bean类,只要指定路径下的java类满足指定的规则,无论其是否使用了注解,spring一样会将其当做bean类来处理。使用<include-filter.../>、<exclude-filter>元素时要求指定一下两个属性:
1》type:指定过滤器类型。spring内建的过滤器类型有:
annotation:Annotation过滤器,该过滤器需要指定一个Annotation名,如com.lfy.bean.MyAnnotation。
assignable:类名过滤器,该过滤器直接指定一个Java类。
regex:正则表达式过滤器,该过滤器指定一个正则表达式,匹配该正则表达式的Java类都将满足该规则。
aspectj:AspectJ过滤器。
2》expression:指定过滤器所需要的表达式。
2、指定bean的作用域
默认是single通。可以使用使用@Scope,也可以在配置文件中指定scope-resolver属性,则自定义的作用域解析器需要自定义,自定义的解析器需要实现ScopeMetadataResolver接口,并提供自定义的作用域解析策略。
举个例子:
<beans ...>
<context:component-scan base-package="com.lfy.bean" scope-resolver="="com.lfy.util.MyScopeResolver"/>
</beans>
3、使用@Resource配置依赖
@Resource有一个name属性,该属性相当于XML Schema模式中ref属性标签的作用。
//此时直接使用的是Java EE规范的Field属性字段注入
@Resource(name="stoneAxe")
private Axe axe;
或
//此时将作为参数传入setter方法
@Resource(name="stoneAxe")
public void setAxe(Axe axe){
this.axe=axe;
}
或者name属性省略
4、使用@PostConstruct和@PreDestroy定制生命周期行为
前面我们使用的生命周期相关的有:
init-method:指定bean的初始化方法--spring容器会在bean的依赖关系注入完成后回调该方法。
destroy-method:指定bean销毁之前的方法--spring容器会在bean销毁之前回调该方法。
注解方面与之对应的有
@PostConstruct:对应init-method
@PreDestroy:对应destroy-method
5、@DependsOn强制初始化其他bean
可以修饰bean类或方法。指定一个字符串数组作为参数。
@dependsOn({"steelAxe","abc"})
@Component
public class Chinese{
...
}
6、@Lazy是否取消预初始化
使用该注解可以指定一个boolean型的value属性,该属性决定是否预初始化bean
@dependsOn({"steelAxe","abc"})
@Lazy(true)
@Component
public class Chinese{
...
}
7、@Autowired自动装配,@Qualifier精确装配
spring-第十三篇之零配置支持的更多相关文章
- 8 -- 深入使用Spring -- 2... Spring的“零配置”支持
8.2 Spring的“零配置”支持 Spring支持使用Annotation来代替XML配置文件.
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- 第十三篇Django Logging配置样例
第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...
- spring-第十七篇之spring AOP基于注解的零配置方式
1.基于注解的零配置方式 Aspect允许使用注解定义切面.切入点和增强处理,spring框架可以识别并根据这些注解来生成AOP代理.spring只是用了和AspectJ 5一样的注解,但并没有使用A ...
- Spring Web工程web.xml零配置即使用Java Config + Annotation
摘要: 在Spring 3.0之前,我们工程中常用Bean都是通过XML形式的文件注解的,少了还可以,但是数量多,关系复杂到后期就很难维护了,所以在3.x之后Spring官方推荐使用Java Conf ...
- Spring AOP基于注解的“零配置”方式实现
为了在Spring中启动@AspectJ支持,需要在类加载路径下新增两个AspectJ库:aspectjweaver.jar和aspectjrt.jar.除此之外,Spring AOP还需要依赖一个a ...
- Spring JdbcTemplate + transactionTemplate 简单示例 (零配置)
jdbcTemplate简介 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. JdbcTempla ...
- 第十三篇 -- 关于C++不支持int
如果是exe的程序的话,DWORD是非法字符,所以需要添加头文件"windows.h"
- Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍
Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍 spring集成 mybatis Spring4.x零配置框架搭建 两年前一直在做后 ...
随机推荐
- 前端开发HTML&css入门——盒子模型以及部分CSS样式
CSS处理网页时,它认为每个元素都包含在一个不可见的盒子里.• 为什么要想象成盒子呢?因为如果把所有的元素都想象成盒子,那么我们对网页的布局就相当于是摆放盒子.• 我们只需要将相应的盒子摆放到网页中相 ...
- ][mybatis]MyBatis mapper文件中的变量引用方式#{}与${}的差别
转自https://blog.csdn.net/szwangdf/article/details/26714603 MyBatis mapper文件中的变量引用方式#{}与${}的差别 默认情况下,使 ...
- nbench
http://www.math.utah.edu/~mayer/linux/bmark.html nbench-byte-2.2.3 --> http://www.math.utah.edu/ ...
- nginx安装配置_runoob_阅读笔记_20190917
Nginx 安装配置_runoob菜鸟教程 Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向 ...
- JAVA中的反射机制 详解
主要介绍以下几方面内容 理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoader 进行类加载 理解反射的机制 掌握 Constructor.Method.Field 类的用 ...
- MAN VGEXTEND
VGEXTEND(8) VGEXTEND(8) NAME/名称 vgexten ...
- hdu 6134: Battlestation Operational (2017 多校第八场 1002)【莫比乌斯】
题目链接 比赛时没抓住重点,对那个受限制的“分数求和”太过关心了..其实如果先利用莫比乌斯函数的一个性质把后面那个[gcd(i,j)=1]去掉,那么问题就可以简化很多.公式如下 这和之前做过的一道题很 ...
- 让Flash内心崩溃的HTML5历史
对于HTML5,在今天这个互联网时代,大部分人应该至少都听说过这个名字,或许很多人对HTML5的了解都起于一句话:FLASH杀手. HTML5其实早已不是什么新鲜的事物了,其最初的雏形早在2004年就 ...
- [CF1167D]Bicolored RBS题解
模拟两个颜色的扩号层数,贪心,如果是左括号,哪边的层数浅就放那边:如果是右括号,哪边的层数深就放那边. 至于层数的维护,两个int就做掉了 放个代码: #include <cstdio> ...
- 29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据)
0 引言 最近项目中用到了基于PCL开发的基于平面的点云和CAD模型的配准算法,点云平面提取采用的算法如下. 1 基于PCL的点云平面分割拟合算法 2 参数及其意义介绍 (1)点云下采样 1. 参数: ...