`

spring常用注解使用解析

 
阅读更多

spring没有采用约定优于配置的策略,spring要求显示指定搜索哪些路径下的Java文件。spring将会把合适的java类全部注册成spring Bean。

 
问题:spring怎么知道把哪些Java类当初bean类处理?
这就需要使用annotation,spring使用一些特殊的annotation来标注bean类。
 
@Component:标准一个普通的spring Bean类。
@Controller:标注一个控制器组件类。
@Service:标注一个业务逻辑组件类。
@Repository:标注一个DAO组件类。
 
Bean实例的名称默认是Bean类的首字母小写,其他部分不变。
 
在spring未来的版本中,@Controller,@Service,@Repository会携带更多语义。尽量考虑使用@Controller,@Service,@Repository代替通用的@Component。
 
指定了某些类可作为Spring Bean类使用后,最好还需要让spring搜索指定路径,此时需要在spring配置文件中导入context Schema,并指定一个简单的搜索路径。
<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:component-scan>添加<include-filter...>或<exclude-filter...>子元素来指定spring bean类,只要位于指定路径下的java类满足这种规则,即使这些java类没有使用任何annotation标注,spring一样会将他们当初bean类来处理。
 
<include-filter...>:满足该规则的java类会被当初bean类处理。
<exclude-filter...>:指定满足该规则的java类不会被当初bean类处理。
 
这两个子元素有两个属性:
type:指定过滤器类型。
expression:指定过滤器所需要的表达式。
 
spring内建支持如下四种过滤器:
annotation:该过滤器要指定一个annotation名,如lee.AnnotationTest。
assignable:类名过滤器,该过滤器直接指定一个java类。
regex:正则表达式过滤器,该过滤器指定一个正则表达式,匹配该正则表达式的java类将满足该过滤规则,如org\.example\.default.*。
aspectj:如org.example..*service+。
<!-- 自动扫描指定包及其子包下的所有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>
 @Resource位于java.annotation包下,来自于java EE规范的一个annotation。使用该annotation为目标bean指定协作者Bean。
@Resource详细用法见经典javaEE企业应用实战。
@Resource有一个name属性,在默认情况下,spring将这个值解释为需要被注入的Bean实例的名字。
@Controller
public class demo {
@Resource(name="user")
private User user;
@Resource(name="user")
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}
 
@Resource也可以直接修饰Filed,
如果@Resource修饰Field,这时候连该属性的setter方法就不需要了。
 
使用@Resource可以省略name属性。
修饰方法时,省略name属性,则该name值是该setter方法去掉前面的set字符串,首字母小写后得到的子串。
修饰Field时,省略name属性,则该name与该Field同名。
 
指定Bean实例的作用域。
@Scope:注解也可以指定Bean实例的作用域。
@Controller("demo")
@Scope("prototype")
public class demo {
 
}
 作用范围就那4中填写,不知道的等我博客,最近在回顾spring知识。
 
@PostConstruct和@PreDestory位于java.annotation包下。
在spring中用于定制spring容器中bean的生命周期行为。
@PostConstruct修饰的方法是bean的初始化之前的方法。
@PreDestory修饰的方法是bean销毁之前的方法。
 
 
深刻理解该类使用了@PostConstruct修饰init方法,那么spring就会在该bean的依赖关系注入完成之后回调该方法。
 
@Component
public class SteelAxe
{
public SteelAxe()
{
System.out.println("创建SteelAxe类对象实例...");
}
}
 
 
demo1:
@Component
public class Chinese
{
// 执行Field注入
@Resource(name="steelAxe")
private SteelAxe steeAxe;
 
public Chinese() {
    super();
System.out.println("创建Chinese类对象实例...");
}
@PostConstruct
public void init()
{
System.out.println("正在执行初始化的init方法...");
}
@PreDestroy
public void close()
{
System.out.println("正在执行销毁之前的close方法...");
}
}
 
// 创建Spring容器
AbstractApplicationContext ctx = new
ClassPathXmlApplicationContext("beans.xml");
// 注册关闭钩子
ctx.registerShutdownHook();
 
打印:
创建Chinese类对象实例...
创建SteelAxe类对象实例...
正在执行初始化的init方法...
正在执行销毁之前的close方法...
 
如果注释掉chinese的依赖注入,那么结果如下:
 
@Component
public class Chinese
{
// 执行Field注入
//@Resource(name="steelAxe")
//private SteelAxe steeAxe;    
public Chinese() {
super();
System.out.println("创建Chinese类对象实例...");
}
@PostConstruct
public void init()
{
System.out.println("正在执行初始化的init方法...");
}
@PreDestroy
public void close()
{
System.out.println("正在执行销毁之前的close方法...");
}
}
 打印:
创建Chinese类对象实例...
正在执行初始化的init方法...
创建SteelAxe类对象实例...
正在执行销毁之前的close方法...
分享到:
评论

相关推荐

    Spring中常用注解

    本文将深入探讨Spring框架中的一些常用注解,并通过实例来解析它们的工作原理。 1. `@Component`: 这是Spring中的基础组件注解,它标记一个类为Spring容器管理的bean。当你在类上使用`@Component`时,Spring会自动...

    Spring Boot 常用注解.rar

    **Spring Boot 常用注解详解** Spring Boot以其简洁的配置、快速的启动和集成众多优秀框架的能力,成为Java开发领域中的热门选择。在Spring Boot应用中,注解起着至关重要的作用,它们简化了配置,使得代码更加简洁...

    springboot常用注解说明

    【Spring Boot常用注解说明】 在Spring Boot框架中,注解起到了至关重要的作用,它们简化了配置,使得开发过程更加高效。以下是一些常见的Spring Boot注解及其详细解释: 1. **@SpringBootApplication** 这是...

    spring基于注解的上传

    总结一下,基于注解的文件上传是Spring MVC中处理文件上传的一种常用方式,通过`@RequestParam`或`@RequestPart`捕获文件数据,配合MultipartResolver进行文件解析和存储。理解并熟练运用这些知识点,可以有效地提高...

    Spring常用配置及解析类说明

    Spring常用配置及解析类说明 Spring Framework是当前最流行的Java EE应用程序框架之一,它提供了强大的配置机制,允许开发者灵活地配置应用程序。春天的配置机制是基于XML文件的,它提供了多种配置方式,包括基于...

    Spring高级之注解驱动开发视频教程

    n 基础应用-常用注解使用场景介绍及入门 n 高级特性-自定义BeanNameGenerator n 高级特性-自定义TypeFilter n 高级特性-ImportSelector和ImportBeanDefinitionRegistrar的分析 n 高级特性-自定义ImportSelector n ...

    Spring MVC注解开发总结

    二、常用注解 1. **@Controller**:此注解标识一个类作为Spring MVC的控制器,它定义了处理HTTP请求的核心组件。 2. **@RequestMapping**: - 类级注解:用于控制器类,定义类级别的URL映射,可以作为所有方法的...

    java毕业设计&课设-spring源码深度解析+注解开发全套视频教程(视频+源码).doc

    - **常用注解**: - **@Component/@Repository/@Service/@Controller**:用于标注组件类。 - **@Autowired**:自动装配Bean。 - **@Resource**:与@Autowired类似,但更加灵活。 - **@PostConstruct/@PreDestroy...

    Spring@注解.md

    使用`@Configuration`注解的类被视为Spring容器的配置类。 - **@Bean**:可以理解为Spring中的`&lt;bean&gt;`标签,用于定义一个具体的Bean。 结合使用`@Configuration`和`@Bean`可以有效地管理Spring容器中的Bean,例如...

    spring mvc+ibatis+spring注解

    Spring MVC、iBatis 和 Spring 注解是Java开发中常用的技术栈,它们分别负责Web层、数据访问层和依赖注入及配置。这篇文章将详细介绍这三个组件的结合使用以及相关的知识点。 **Spring MVC** Spring MVC 是 Spring ...

    Spring MVC之Controller层的常用注解

    本篇文章将深入探讨Spring MVC Controller层中的常用注解,帮助开发者更好地理解和运用这些注解来构建高效、可维护的Web应用。 1. `@Controller`:这是最基本的注解,表明一个类是Spring MVC的Controller。它通常...

    Spring 注解方式新加jar包.rar

    9. `classmate.jar`:用于处理类型信息,帮助Spring解析注解。 确保这些jar包在项目类路径中是必不可少的,因为它们提供了Spring注解方式所需的全部支持。在实际开发中,通常通过Maven或Gradle等构建工具来管理这些...

    Spring常用的7大注解详解代码分析.docx

    本文将深入解析Spring中最常用的七大注解:`@Required`、`@Autowired`、`@Qualifier`、`@Configuration`、`@ComponentScan`、`@Lazy`和`@Value`,以及它们在实际开发中的应用。 1. **@Required** `@Required`注解...

    spring注解

    为了使用Spring注解功能,首先需要确保项目中有正确的jar包。以下是必需的jar包列表: - `spring.jar`:Spring框架的核心库。 - `commons-logging.jar`:用于日志记录的支持库。 - `log4j-1.2.15.jar`:一个可选的...

    spring springMVC中常用注解解析

    在Spring和SpringMVC中,注解的使用大大简化了配置,提高了代码的可读性和可维护性。下面我们将详细讲解一些常用的注解。 1. **@Configuration 和 @ComponentScan** - `@Configuration`:这是一个核心注解,用于...

    spring常用架包

    这个"spring常用架包"集合了Spring框架中常用的核心组件,方便开发者在项目中快速引用。以下是对这些核心组件及其功能的详细介绍: 1. **Spring Core**:这是Spring框架的基础,提供依赖注入(Dependency Injection...

    Spring常用的jar包.rar

    这个"Spring常用的jar包.rar"文件包含了一系列Spring框架的核心组件和依赖,使得开发者能够快速搭建一个基于Spring的项目环境。以下是对这些jar包及其重要性的详细解释: 1. **spring-core.jar**:这是Spring框架的...

    果子学院Spring boot源码解析

    6. **条件注解(Conditional Annotation)**:Spring Boot使用`@Conditional`系列注解来决定哪些配置类或Bean应该在特定条件下生效。例如,`@ConditionalOnClass`和`@ConditionalOnProperty`。 7. **YAML与...

    spring源码解析

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)能力而著名。Spring框架的设计理念是使应用程序的组件化...

Global site tag (gtag.js) - Google Analytics