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-第十三篇之零配置支持的更多相关文章

  1. 8 -- 深入使用Spring -- 2... Spring的“零配置”支持

    8.2 Spring的“零配置”支持 Spring支持使用Annotation来代替XML配置文件.

  2. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

  3. 第十三篇Django Logging配置样例

    第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...

  4. spring-第十七篇之spring AOP基于注解的零配置方式

    1.基于注解的零配置方式 Aspect允许使用注解定义切面.切入点和增强处理,spring框架可以识别并根据这些注解来生成AOP代理.spring只是用了和AspectJ 5一样的注解,但并没有使用A ...

  5. Spring Web工程web.xml零配置即使用Java Config + Annotation

    摘要: 在Spring 3.0之前,我们工程中常用Bean都是通过XML形式的文件注解的,少了还可以,但是数量多,关系复杂到后期就很难维护了,所以在3.x之后Spring官方推荐使用Java Conf ...

  6. Spring AOP基于注解的“零配置”方式实现

    为了在Spring中启动@AspectJ支持,需要在类加载路径下新增两个AspectJ库:aspectjweaver.jar和aspectjrt.jar.除此之外,Spring AOP还需要依赖一个a ...

  7. Spring JdbcTemplate + transactionTemplate 简单示例 (零配置)

    jdbcTemplate简介 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. JdbcTempla ...

  8. 第十三篇 -- 关于C++不支持int

    如果是exe的程序的话,DWORD是非法字符,所以需要添加头文件"windows.h"

  9. Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍

    Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍 spring集成 mybatis Spring4.x零配置框架搭建 两年前一直在做后 ...

随机推荐

  1. 【学习总结】SQL学习总结

    参考链接: 菜鸟教程: 一.认识sql 二.sql语法 三.sql高级教程 四.sql函数 一.认识SQL SQL是什么? SQL 是用于访问和处理数据库的标准的计算机语言. SQL,指结构化查询语言 ...

  2. LinuxC语言实现服务端与客户端多进程通信

    链接:https://pan.baidu.com/s/1YDNIyTKAkh4E5x2dBeTgcQ 提取码:y35q 复制这段内容后打开百度网盘手机App,操作更方便哦 本实验用的是Centos7m ...

  3. 【改】linux中分区的概念

    1.目录和分区 区别:Linux的分区是物理上的概念,从物理上将存储空间分开:Linux的目录是逻辑上的概念,Linux的目录树实际上是一个分区之间的数据逻辑结构关系,不是物理结构: 联系:一个分区必 ...

  4. python常用函数 V

    vars(object) 返回对象object的属性和属性值的字典对象.不输入参数,就打印当前调用位置的属性和属性值,相当于locals()的功能. 例子:

  5. ACM-ICPC 2015 Changchun Preliminary Contest J. Unknown Treasure (卢卡斯定理+中国剩余定理)

    题目链接:https://nanti.jisuanke.com/t/A1842 题目大意:给定整数n,m,k,其中1≤m≤n≤1018,k≤10, 然后给出k个素数,保证M=p[1]*p[2]……*p ...

  6. tf.expand_dims

    想要增加一维,可以使用tf.expand_dims(input, dim, name=None)函数 t = np.array(np.arange(1, 1 + 30).reshape([2, 3, ...

  7. JavaWeb(八):Filter和Listener

    一.Filter 1.1 概述 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能.在 Servlet ...

  8. @ContrllerAdvice全局异常

    @ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理.最常用的 ...

  9. Django的使用一

    Django是一个由Python写成的Web应用框架,是 Python 社区的两大最受欢迎的 Web 框架之一(另一个是 Flask). Django的主要目的是简便.快速的开发数据库驱动的网站. 1 ...

  10. 模拟安装redis5.0集群并通过Java代码访问redis集群

    在虚拟机上模拟redis5.0的集群,由于redis的投票机制,一个集群至少需要3个redis节点,如果每个节点设置一主一备,一共需要六台虚拟机来搭建集群,此处,在一台虚拟机上使用6个redis实例来 ...