Spring相关
@Autowired
默认按类型匹配 byType 成员变量、set方法、构造方法
bean应当有且只有一个,没有报错 【没有或者多个都会报错BeanCreationException异常】
@Autowired(required = false)
即便bean不存在,也不报错,少用
@Qualifier
注释指定注入 Bean 的名称 ,配合@Autowired 一起使用 byName 有益补充
JSR定义的注解需要生效的话:
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
@Resource
默认按名称匹配 name type 2个属性 使用哪个就按照哪个进行注入
【本质上和@Autowired功能一样】
@PostConstruct 和 @PreDestroy
实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法
<bean> 元素的 init-method/destroy-method 属性
这些方法就会在 Bean 初始化后或销毁之前被 Spring 容器执行
打在方法上,可以在多个方法上进行注解
上面的就是说,在XML配置下BEAN的定义,然后通过@注解的方式进行注入
那么能否把在XML中定义BEAN的配置也通过注解的方式进行呢?使用@Component注解达到目的。
@Component、@Service【业务层】、@Constroller【控制层】,它们分别用于软件系统的不同层次
@Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为 Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型
以上注解定义时可以指定BEAN的名称
通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring 会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring 受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。
在使用 @Component 注释后,Spring 容器必须启用类扫描机制以启用注释驱动 Bean 定义和注释驱动 Bean 自动注入的策略。
<context:component-scan base-package="X.Y.Z"/> 类包及其递归子包中所有的类都会被处理
Scope:
默认情况下通过 @Component 定义的 Bean 都是 singleton 的,如果需要使用其它作用范围的 Bean,可以通过@Scope 注释来达到目标
prototype 从 Spring 容器中获取 boss Bean 时,每次返回的都是新的实例
singleton 单例
在实现应用中,我们往往需要同时使用注释配置和 XML 配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。
@Lazy(true) 表示延迟初始化
SPRING事务相关
主要是存在于方法上: @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
REQUIRED(默认值):在有transaction状态下执行;如当前没有transaction,则创建新transaction;
SUPPORTS:如当前有transaction,则在transaction状态下执行;如果当前没有transaction,在无transaction状态下执行;
REQUIRES_NEW:创建新的transaction并执行;如果当前已有transaction,则将当前transaction挂起;
其实主要考虑的是这样的情况:
A 调用 B
如果A B处于同一个事务当中,那么需要保证如果B失败了,那么A也应该失败,否则就会不一致了
如果A处于一个事务S1当中,B处于另一个事务S2当中,那么如果B成功失败与否都不会影响A的执行的
readOnly=true:会告诉底层数据源,这个是一个只读事务,对于JDBC而言,只读事务会有一定的速度优化
-----------------------------------------------------
Struts相关
Action注解
@Namespace("/api/internal/vod-coupon") 注意是以/开头,还是不是以/开头的 命名空间
@ParentPackage("basePackage") //指定父包
@Action("userAction") //指定action的访问url 实际中一般打在方法上,实现一个ACTION中的多个方法响应多个URL
与Spring如何结合的:
struts拦截器:
<filter> <filter-name>struts2Filter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter>
<filter-mapping> <filter-name>struts2Filter</filter-name> <url-pattern>*.action</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
Spring监听器:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
Spring配置文件加载路径:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext*.xml</param-value> </context-param>
参考博客:
http://blog.csdn.net/wk313753744/article/details/19920195
http://www.2cto.com/kf/201503/383399.html
-----------------------------------------------------