`

spring注解与jsr250,330

阅读更多
Spring自带部分:

1.依赖注入注解部分:

1、@Autowired:自动装配
@Autowired默认是根据类型注入,不会使用名字,除非配置了@qualifier();
可以用于构造器、字段、方法注入,
使用方式如下:
@Autowired(required=true)
构造器、字段、方法(setter(A a)&other(A a,...))
(如果用 @Autowired 同时标注了多个构造函数,那么,Spring 将采用贪心算法匹配构造函数 ( 构造函数最长 ))
注意事项:
@Autowired默认是根据参数类型进行自动装配,且必须有一个Bean候选者注入,
如果允许出现0个Bean候选者需要设置属性“required=false”,
“required”属性含义和@Required一样,只是@Required只适用于基于XML配置的setter注入方式

2、@Required:依赖检查
@Required只能放置在setter方法上,且通过XML配置的setter注入
使用方法:
public class TestBean {
private String message;
@Required
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
beans-xml:
<bean id="testBean" class="xx.TestBean">
<property name="message" ref="message"/> <!--setter注入-->
</bean>
<bean id="message" class="java.lang.String">
<constructor-arg index="0" value="hello"/><!--构造赋值-->
</bean>
注意事项:
配合xml的setter注入方式一起使用。

3、@Value:注入SpEL表达式;
1、可以在类字段上使用该注解:
@Value(value = "#{message}")
private String message;

2、可以放置在带@Autowired注解的方法的参数上:
@Autowired
public void initMessage(@Value(value = "#{ T(java.lang.Math).random() * 100.0 }") String message) {
this.message = message;
}

3、还可以放置在带@Autowired注解的构造器的参数上:
@Autowired
private xx(@Value(value = "#{message}#{message}") String message) { 
this.message = message; 
}
4、@Qualifier:限定描述符,用于细粒度选择候选者;
使用方法:
结合@Autowired 一起使用


(1)、根据基于XML配置中的<qualifier>标签指定的名字进行注入,使用如下方式指定名称

<bean id="X" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<qualifier  type="org.springframework.beans.factory.annotation.Qualifier"  value="限定标识符"/>
</bean>
class X{
  public void initDataSource(@Qualifier("限定标识符") DataSource dataSource) {  
   this.dataSource = dataSource;  
}  
}

使用<qualifier>标签指定的限定标识符只能被@Qualifier使用,不能作为Bean的标识符,
如“ctx.getBean("限定标识符")”是获取不到Bean的。

(2)、缺省的根据Bean名字注入:最基本方式,是在Bean上没有指定<qualifier>标签时一种容错机制,即缺省情况下使用Bean标识符注入,但如果你指定了<qualifier>标签将不会发生容错。
默认情况下(没指定<qualifier>标签)@Qualifier的value属性将匹配Bean 标识符。


(3)、扩展@Qualifier限定描述符注解部分(有兴趣请自己深入):
定义:
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface DataSourceType {
String ip();      //指定ip,用于多数据源情况
DataBase database();//指定数据库类型
}

使用:
@Autowired
public void initDataSource(
@DataSourceType(ip="localhost", database=DataBase.MYSQL)
DataSource mysqlDataSource,
@DataSourceType(ip="localhost", database=DataBase.ORACLE)
DataSource oracleDataSource) {
this.mysqlDataSource = mysqlDataSource;
this.oracleDataSource = oracleDataSource;
}


2.初始化bean部分:

1,@Component
@Component是一个一般的注释。用于一般的类。
@Repository,@Service,@Controller是特殊的预定义的注释。
2,@Repository
用于数据访问组件,即Dao
@Repository ("xxDao")
 
3,@Service
用于业务逻辑组件。
@Service("xxService")

4,@Controller
用于控制类组件。即Action
@Controller
public class MyController{...}


5,配合的注解@Scope("prototype"),@Scope("session")使用




JSR-250注解:

1、@Resource:自动装配
默认byName,找不到会退而使用 byType 继续匹配。
使用方法:   
@Resource(name = "标识符",[type=""])
字段或setter方法
@Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;


使用@Resource需要注意以下几点:
1. @Resource注解应该只用于setter方法注入,不能提供如@Autowired多参数方法注入;
2. @Resource在没有指定name属性的情况下首先将根据setter方法对于的字段名查找资源,如果找不到再根据类型查找;
3. @Resource首先将从JNDI环境中查找资源,如果没找到默认再到Spring容器中查找,因此如果JNDI环境中有和Spring容器同名的资源时需要注意。

2、@PostConstruct和PreDestroy:通过注解指定初始化和销毁方法定义
相当于xml里面配置的init-method,destory-method属性
但具有更高优先级,即注解方式的初始化和销毁方法将先执行。


JSR-330注解:

1、@Inject:等价于默认的@Autowired,只是没有required属性;

        2、@Named:指定Bean名字,对应于Spring自带@Qualifier中的缺省的根据Bean名字注入情况;

        3、@Qualifier:只对应于Spring自带@Qualifier中的扩展@Qualifier限定描述符注解,即只能扩展使用,没有value属性。



JPA注解:

1.用于注入EntityManagerFactory和EntityManager。






在spring中一些常见的省略的配置:
1. <context:annotation-config />
作用是隐式地向 Spring 容器注册
CommonAnnotationBeanPostProcessor、
AutowiredAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor、
RequiredAnnotationBeanPostProcessor 这4个BeanPostProcessor.

例如:

如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor。

如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。

如果你想使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。
传统声明方式如下:<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/>

如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。同样,传统的声明方式如下:
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>



2.<context:spring-configured/>

Spring 可以为IOC容器里的bean进行依赖注入,但如果某些类,没有配置在IOC里,比如一些Domain Object,是否也可以依赖注入?答案是肯定的。
以User 为例,该User并没有配置在IOC里,但我想对其里面的一个UserDao进行依赖注入,其代码如下:
@Configurable(autowire = Autowire.BY_NAME, dependencyCheck = false)
public class User {
  private String UserName;
  ....
  private  UserDao userDao; 

  ... 

  @Autowired/@Bean
  public void setUserDao〔UserDao userDao〕{
this.userDao=userDao.
  }
}
然后再在XML文件里加上 就可以了。
主要是通过Spring管理AnnotationBeanConfigurerAspect切面, 具体的工作由该切面完成。

3.<context:property-placeholder location="classpath:config/mybatis/jdbc.properties,classpath:config/others/config.properties" />

以前使用的方式:
<!-- PropertyPlaceholderConfigurer,用于spring ${placeholder}的解析 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="properties">
<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<!-- 标准配置 -->
<value>classpath:config/others/config.properties</value>
<value>classpath:config/mybatis/jdbc.properties</value>
</list>
</property>
</bean>
</property>
</bean>


4.<context:component-scan base-package="example" use-default-filters="false">
<context:include-filter type="aspectj" expression="example..Stub*"/>
<context:exclude-filter type="annotation" expression="example.Mock"/>
</context:component-scan>



spring mvc 部分省略的配置:
mvc:annotation-driven
mvc:interceptors
mvc:view-controller
mvc:resources
mvc:default-servlet-handler



//以上资料供不时之需









分享到:
评论

相关推荐

    spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)

    spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)

    Spring IOC之 使用JSR 330标准注解.docx

    这些注解可以喝Spring注解一样被扫描到。你只需要将相关的Jar包加入到你的classpath中即可。 注意:如果你使用Maven,javax.inject子包是需要在标准Maven仓库中用到的...

    Struts2.0+Springframework2.5+ibatis2.3完美整合用户登录及增删改查

    BEA系统宣布了他们在一个名为Pitchfork的项目上与Interface21的合作,该项目提供了基于Spring的Java EE 5编程模型的实现,包括支持用于注入(injection)、拦截( interception)和事务处理(transactions)的JSR-...

    23 Spring Core参数校验之JSR303_JSR-349注解-慕课专栏1

    背景参数校验是我们程序开发中必不可少的过程。用户在前端要校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的健壮性,后端同样需要对数据进行校验。当我们

    springmvc_jsr303

    项目中所需的jar包在压缩包中已提供,项目中用到了JSR303和hibernate-validator的技术,大量采用了注解@NotNull,@Email,@Length,@Max,@Pattern,@Size等,此外还采用了自定义注解,验证信息全部配置在属性文件中.

    JSR303依赖的jar包

    Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。 该压缩包包含了hibernate-validator-5.2.4.Final.jar、hibernate-validator-annotation-processor-5.2.4.Final.jar、...

    Spring2.5的新特性

    BEA系统宣布了他们在一个名为Pitchfork的项目上与Interface21的合作,该项目提供了基于Spring的Java EE 5编程模型的实现,包括支持用于注入(injection)、拦截( interception)和事务处理(transactions)的JSR-...

    Spring3MVC注解教程.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...

    Spring框架中 @Autowired 和 @Resource 注解的区别

    在 spring 框架中,除了使用其特有的注解外,使用基于 JSR-250 的注解,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释。  首先,咱们简单了解 @PostConstruct 和 @PreDestroy 注释:  为了定义一个 bean...

    Spring_Hibernate_JAVAX_Annotation注解

    SSH开发注解大全,涉及到的注解内容涵盖AspectJ,Batch,Spring,Cache,Data-Jpa,Integration,JMX,Roo,Security,Test,MVC,WS,JSR(168,222,224,250,299,303,314,317,330,220),Hibernate 3

    Spring学习之(四)基于注解的组件扫描.pdf

    Spring学习之(四)基于注解的组件扫描;学习笔记

    Spring的学习笔记

    (一) JSR-250 17 (二) @Resource 17 四、 @Componet 18 五、 @Scope、@PostConstruct、@PreDestroy 19 六、 注解对应的jar包 19 第七课:AOP(面向切面编程) 19 一、 AOP概念 19 二、 利用动态代理实现面向切面编程 ...

    springboot学习思维笔记.xmind

    @Resource:JSR-250提供的注解 Java配置 @Configuration声明当前类是一个配置类 @Bean注解在方法上,声明当前方法的返回值为一个Bean AOP @Aspect 声明是一个切面 拦截规则@After @Before ...

    JAVA编程之spring cache本机缓存应用

    1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和更多自定义的选项 2、Spring Cache利用了AOP,实现了基于注解的缓存...

    spring 相关jar包

    Spring需要的相关jar包。包括spring.jar 、commons-logging.jar 如果使用了且卖弄编程(AOP)还需要下列jar...如果使用了JSR-250中的注解,如@PostConstruct/@PreDestroy 还需要下列jar文件 common-annotations.jar

    Spring攻略(第二版 中文高清版).part1

    8.12 使用注解(JSR-303)的Bean校验 341 8.12.1 问题 341 8.12.2 解决方案 342 8.12.3 工作原理 342 8.13 创建Excel和PDF视图 344 8.13.1 问题 344 8.13.2 解决方案 345 8.13.3 工作原理 345 8.14 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...

    Spring中文帮助文档

    2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.3.3. 对bean命名pointcut( bean name pointcut ...

    Spring 2.0 开发参考手册

    17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

Global site tag (gtag.js) - Google Analytics