Spring的学习(六):Annotation
Spring的学习(六):Annotation
yuhuan121 发表于4个月前
Spring的学习(六):Annotation
  • 发表于 4个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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设置为该实例变量的值;

共有 人打赏支持
粉丝 0
博文 36
码字总数 38704
×
yuhuan121
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: