一:@PostConstruct(JSR-250)
在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。
它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时,如:
Java代码
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
private SessionFactory mySessionFacotry;
@Resource
public void setMySessionFacotry(SessionFactory sessionFacotry) {
this.mySessionFacotry = sessionFacotry;
}
@PostConstruct
public void injectSessionFactory() {
super.setSessionFactory(mySessionFacotry);
}
...
}
这里通过@PostConstruct,为UserDaoImpl的父类里定义的一个sessionFactory私有属性,注入了我们自己定义的sessionFactory(父类的setSessionFactory方法为final,不可复写),之后我们就可以通过调用super.getSessionFactory()来访问该属性了。
我们知道注释本身是不会做任何事情的,它仅提供元数据信息。要使元数据信息真正起作用,必须让负责处理这些元数据的处理器工作起来。
AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor就是处理这些注释元数据的处理器。
但是直接在Spring配置文件中定义这些Bean显得比较笨拙。Spring为我们提供了一种方便的注册这些BeanPostProcessor的方式,
这就是<context:annotation-config />:
Java代码
<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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
</beans>
<context:annotationconfig />将隐式地向Spring容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。
二:使用Spring注解完成Bean的定义 我们推荐使用@Repository(数据存储层)、@Service(业务层)、@Controller(表现层)来替代@Component。
使用<context:component-scan />让Bean定义注解工作起来
Java代码
<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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.kedacom.ksoa" />
</beans>
这里,所有通过<bean>元素定义Bean的配置内容已经被移除,仅需要添加一行<context:component-scan />配置就解决所有问题了——Spring XML配置文件得到了极致的简化(当然配置元数据还是需要的,只不过以注释形式存在罢了)。<context:component-scan />的base-package属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。
<context:component-scan />还允许定义过滤器将基包下的某些类纳入或排除。Spring支持以下4种类型的过滤方式:
?过滤器类型 表达式范例 说明
?注解 org.example.SomeAnnotation 将所有使用SomeAnnotation注解的类过滤出来
?类名指定 org.example.SomeClass 过滤指定的类
?正则表达式 com\.kedacom\.spring\.annotation\.web\..* 通过正则表达式过滤一些类
?AspectJ表达式 org.example..*Service+ 通过AspectJ表达式过滤一些类
以正则表达式为例,我列举一个应用实例:
Java代码
<context:component-scan base-package="com.casheen.spring.annotation">
<context:exclude-filter type="regex" expression="com\.casheen\.spring\.annotation\.web\..*" />
</context:component-scan>
三:使用@Scope来定义Bean的作用范围
在使用XML定义Bean时,我们可能还需要通过bean的scope属性来定义一个Bean的作用范围,我们同样可以通过@Scope注解来完成这项工作:
Java代码
@Scope("session")
@Component()
public class UserSessionBean implements Serializable {
...
}
分享到:
相关推荐
在本篇《Spring注解学习手札(四)持久层浅析》中,我们将深入探讨Spring框架在持久层的应用,特别是如何通过注解简化数据库操作。Spring作为一个强大的轻量级框架,提供了丰富的功能来处理数据访问,使得开发者可以...
本文将对Spring监听器进行深入浅析,包括其工作原理、源码解析以及如何使用。 首先,Spring监听器是基于事件驱动模型的,这种模式在多线程和分布式系统中非常常见。在Spring中,当一个特定的事件发生时,如bean的...
本文将深入探讨Spring框架的三个重要版本:Spring 3.1、3.2和3.3,揭示它们带来的新特性、改进和优化,帮助开发者更好地理解和利用这些更新。 在Spring 3.1中,最显著的改进是引入了Groovy配置的支持,这为开发者...
6. **JSR-107 支持**:从 Spring 4.1 开始,Spring Cache 添加了对 JSR-107(Java Caching API)标准的注解支持,使得开发者可以直接使用 JSR-107 提供的缓存注解,如 `@CacheResult`、`@CacheEvictAll` 等,增强了...
浅析@ReponseBody和@RequestBody注解 @ReponseBody和@RequestBody是Spring MVC框架中两个重要的注解,分别用于处理HTTP请求和响应体。下面我们将详细分析这两个注解的作用和Spring MVC内部是如何对他们进行解析的。...
Spring Boot 自动配置之条件注解浅析 Spring Boot 提供了自动配置的机制,通过大量的条件注解来实现自动化配置。条件注解是指在特定条件下创建特定的Bean,例如,在某些系统变量下创建Bean,或者只有在某个Bean创建...
在Spring中,通过注解或XML配置可以定义切面和通知。例如,使用`@Aspect`注解创建切面类,`@Before`、`@After`、`@Around`等注解定义通知,`@Pointcut`定义切入点表达式。 ```java @Aspect public class ...
Spring Cloud Netflix是一个强大的微服务工具集,它是Spring Cloud生态的一部分,专门为基于Spring Boot的应用提供了一套完整的服务治理方案。在微服务架构中,Spring Cloud Netflix提供了多种组件来解决分布式系统...
同时,Spring还提供了基于注解的AOP,简化了切面的定义,使得开发人员可以更加方便地实现横切关注点的管理。 在实际开发中,我们可以使用Spring AOP来实现如事务管理、日志记录等功能,避免在业务代码中插入这些与...
Mybatis和Spring的整合主要依赖于Mybatis-Spring这个库,它是Mybatis社区为了弥补Spring3在Mybatis3支持上的空白而开发的。这个库使得Mybatis与Spring的集成更加平滑,允许开发者充分利用两者的优点,实现数据访问层...
本文将深入浅析Spring AOP在权限管理中的应用,结合标签"源码"和"工具",我们将探讨如何利用Spring AOP实现精细的权限控制,并通过具体的代码示例来理解这一过程。 Spring AOP(Aspect Oriented Programming)是...
在Spring框架中,Null-Safety是一项重要的特性,它旨在帮助开发者编写更加健壮且避免空指针异常(NullPointerException,简称NPE)的代码。自从Spring 5引入这一特性以来,开发者可以通过使用特定的注解来声明API和...
Java的Spring框架是企业级应用开发的常用工具,它的核心组成部分是IoC(Inversion of Control,控制反转)容器,负责...无论是在简单的应用程序还是大型的企业级项目中,理解并熟练运用Spring的IoC容器都是至关重要的。
Spring Boot 的自动配置类通常会使用 `@Conditional` 注解,比如 `@ConditionalOnClass` 和 `@ConditionalOnBean`,这些注解用于判断类路径中是否存在某个类或某个 Bean,如果满足条件,则自动配置相应的 Bean。...
对于HTTP控制器,可以使用`@RequestMapping`注解指定响应编码: ```java @RequestMapping(value="/xxx", produces = "application/json; charset=utf-8") ``` 最后,数据库操作中的乱码问题也不容忽视。如果数据库...
【标题】:浅析Digester 在Java开发中,我们经常需要处理XML文件,解析XML并将其内容映射到相应的Java对象上。这时,Apache Commons Digester库就派上了用场。本文将深入探讨Digester的功能、工作原理以及如何在...
数据质量是信息技术领域中的核心议题,尤其是在大数据时代,高质量的数据对于企业决策、业务运营和数据分析至关重要。石秀峰先生的“浅析数据质量管理体系与方法”深入探讨了如何构建有效的数据质量管理机制,确保...