文档章节

Spring的学习(六):Annotation

yuhuan121
 yuhuan121
发布于 2017/08/26 11:19
字数 883
阅读 2
收藏 0

1、搜索Bean类

Spring没有采用“约定优于配置”的策略,但是依然要求程序猿显式指定搜索某些路径下的Java类,并将这些Java类注册成Bean实例。此时,可以使用Annotation来标注Spring Bean ,使得Spring知道把哪些Java类当成Bean类处理。

Spring提供了如下几个类来标注Spring Bean :

  • @Component:标注一个普通的Spring Bean 类;
  • @Controller:标注一个控制器组件类;
  • @Service:标注一个业务逻辑组件类;
  • @Repository:标注一个DAO组件类;用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean

代码实现

每个Java类都使用了@Component标注,这表明这些Java类都将作为Spring的Bean类;

package org.crazyit.app.service.impl;
import org.springframework.stereotype.*;
import org.crazyit.app.service.*;
@Component
public class Chinese
	implements Person
{
	private Axe axe;
	// axe的setter方法
	public void setAxe(Axe axe)
	{
		this.axe = axe;
	}
	// 实现Person接口的useAxe()方法
	public void useAxe()
	{
		System.out.println(axe.chop());
	}
}
package org.crazyit.app.service.impl;
import org.springframework.stereotype.*;
import org.crazyit.app.service.*;
@Component
public class SteelAxe implements Axe
{
	public String chop()
	{
		return "钢斧砍柴真快";
	}
}
package org.crazyit.app.service.impl;
import org.springframework.stereotype.*;
import org.crazyit.app.service.*;
@Component
public class StoneAxe implements Axe
{
	public String chop()
	{
		return "石斧砍柴好慢";
	}
}

需要在配置文件中导入context Schema,并指定搜索路径,Spring将会自动搜索此路径下的所有Java类;

<?xml version="1.0" encoding="UTF-8"?>
<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="org.crazyit.app.service"/>
</beans>

<context../>指定spring把此包和子包下的所有Java类都当做Spring类来处理,并为之创建相应的Bean实例。

也可以在使用@Component时指定Bean实例的名称,如:@Component("axe")

还可以通过为<component-scan../>元素添加两个子元素来指定Bean类:只要位于指定路径下的Java满足这种规则,即使没有使用Annocation标注,Spring同样会把它当成Bean类处理。

  • <include-filter../>:用于指定满足此规则的Java类被当成Bean类来处理;
  • <exclude-filter../>:用于指定满足此规则的Java类不会被当成Bean类来处理;
<!-- 自动扫描指定包及其子包下的所有Bean类 -->
	<context:component-scan 
		base-package="org.crazyit.app.service">
		<!-- 只将以Chinese、Axe结尾的类当成Spring容器中的Bean -->
		<context:include-filter type="regex"
			expression=".*Chinese"/>
		<context:include-filter type="regex"
			expression=".*Axe"/>
	</context:component-scan>

使用它俩时要求指定两属性:

  • type:指定过滤器类型;
  • expression:指定过滤器所需要的表达式;

Spring内建支持4种过滤器:

  • annotation:Annotation过滤器;
  • assignable:类名过滤器;
  • regex:正则表达式过滤器;
  • aspectj:AspectJ过滤器;

2、指定Bean的作用域

@Scope("作用域类型")

//指定该Bean实例的作用域为prototype
@Scope("prototype")

3、配置依赖

@Resource(name = " ") name属性为需要被注入的Bean的实例;

4、定制生命周期行为

@PostConstruct:修饰Bean的初始化方法; @PreDestroy:修饰Bean销毁之前的方法;

5、自动装配

@Autowired :指定自动装配,可以修饰setter方法、普通方法、实例变量和构造器等;

当用它标注setter方法时,默采用byType自动装配策略;

还可以标注多个参数的普通方法,spring会自动到容器中搜索类型匹配的Bean。若恰好为每个都找到一个,spring会自动以这些Bean作为参数来调用该方法;

当@Autowired 修饰一个实例变量时,spring会把容器中与该变量类型匹配的Bean设置为该实例变量的值;

© 著作权归作者所有

共有 人打赏支持
yuhuan121
粉丝 0
博文 36
码字总数 38704
作品 0
佛山
程序员
SPRING注解发布RMI/HTTPInvoker/Hessian/Burlap服务

最近做系统重构,计划将多个系统的公共部分抽取出来作为一项公共服务,为以后项目维护和横向扩展奠定基础。 常用的服务发布方式有RMI / HTTPInvoker / Hessian / Burlap,关于这几类java远程...

大米被占用
2014/12/09
0
9
@EnableAutoConfiguration源码解析

本文基于spring-boot:1.5.14.RELEASE 本人能力有限,很多地方可能说的不够详尽,不到之处还请斧正。写本文的目的主要是巩固自己的学习,也给spring boot初学者一些帮助。 @EnableAutoConfigu...

Shine_Chan
07/27
0
0
Spring Aop配置时的切入点表达式

对应的中文: 任意公共方法的执行: execution(public (..)) 任何一个以“set”开始的方法的执行: execution( set(..)) AccountService 接口的任意方法的执行: execution( com.xyz.service...

cswy
2013/12/05
0
0
SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance
06/01
0
0
spring vmc3.1.1 上,通过AnnotationMethodHandlerAdap...

spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializer失效解决方案 问题: spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializ......

爪哇小贩
2013/03/23
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

获取多个集合列表的笛卡尔积

获取多个集合笛卡尔积 电商中典型业务场景:商品搜索 单属性属性值之间为并查询 不同属性的属性值之间查询为与查询 import java.util.ArrayList;import java.util.List;/** * Created w...

键走偏锋
21分钟前
0
0
echarts 迁移地图 控制鼠标缩放大小比例

在网上找了好久没有找到解决方式,还是重新看了一下文档,终于找到的解决方案, zoom:1, //默认显示级别 scaleLimit:{min:1,max:3}, // 缩放级别 echarts 文档-配置项链接 http://echarts.b...

心驰
24分钟前
0
0
Boot2Docker ISO is out-of-date,

Boot2Docker ISO is out-of-date, downloading the latest release. 使用docker-machine时无法更新Boot2Docker ISO导致创建vm machine失败 解决方法:关闭网络,创建好之后再开启...

writeademo
32分钟前
0
0
在 Tomcat 中设置 Tapestry 框架的 html 热加载

如果开发中使用到了 Tapestry 这个框架,如果事先没有设置过的话,开发的时候 html 是不会热加载的,也就是说修改了 html 文件,不能刷新浏览器后立马看到修改完的效果,必须先重新启动应用服...

LeoXu
54分钟前
0
0
【微服务】开启巨石应用到微服务的探索

背景 在过去的一年时间里,我一直在从事一件事情,将现有的单体应用(巨石应用)向微服务改造。 接下来,将持续整理一些在微服务路上的学习与成长。 为什么要做微服务 单体应用,开发、部署简...

艳沐石
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部