文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

误删除innodb ibdata数据文件恢复

今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了。不知道怎么解决。当时我也不知道怎么办。后来查阅相关资料。终找到解决方法。其实恢复也挺简单...

IT--小哥
24分钟前
1
0
常见设计模式UML图

常见设计模式UML图 本文主要总结常见的设计模式的UML图,方便查阅和思考。 创建型模式 简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和单例模式,这五种设计模式主要处理对象的创建...

陶小陶
41分钟前
1
0
分布式缓存架构设计

零、 题记 在高并发场景下,需要通过缓存来减少数据库的压力,使得大量的访问进来能够命中缓存,只有少量的需要到数据库层。由于缓存基于内存,可支持的并发量远远大于基于硬盘的数据库。所以...

Ala6
43分钟前
2
0
简单工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一...

NinjaFrog
45分钟前
1
0
git(一) 基本操作(branch、tag、冲突)

layout: blog istop: true title: "git基本操作(branch、tag、冲突)" date: 2018-09-11 category: 版本控制 tags: - 版本控制 撤销操作 修改最后一次提交 解释:修改上次提交。可以修改内容...

开心的哈士奇
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部