spring注解归类

IoC注解:

XML:

1
<ben id="" class=""/>

作用:

被贴的类,交给spring管理(会被创建对象,存储在spring容器中)

注解:

(四个作用一样)
Repository : 一般贴DAO类
Service : 一般贴Service类
Controller : 一般贴Controller类
Component : 非上述三种类型的类

解析器:

1
<context:component-scan basePackage="me.cscar.ssm">

xml:

1
<bean id="someBean" class="...SomeBean" scope="singleton" init-method="open" destory-method="close"/>

1
2
3
4
5
6
7
8
9
10
11
@Component("someBean")
@Scope("singleton")
class SomeBean{

@PostConstruct
public void open(){}

@PreDestory
public void close(){}

}

DI注解:

作用:

从容器中找到指定的bean对象,并设置给该字段.

注解:

Autowired
Resource
二者功能一样

解析器:

1
<context:annotation-config/>

xml:

1
2
3
4
5
<bean id="otherBean" class="..OtherBean">

<bean id="someBean" class="..SomeBean">
<property name="other" ref="otherBean"/>
</bean>
1
2
3
4
5
6
7
8
@Component
class OtherBean{}

@Component
class SomeBean{
@Autowired
private OtherBean other;
}

Tx注解:

作用:

增加Service组件支持事务管理

注解:

Transactional

解析器:

1
<tx:annotation-driven transaction-manager="txManager"/>

xml配置

配置事务管理器(what)

1
2
3
<bean id="txManager" class="...DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>

配置事务增强(配置事务方法的属性 when)

1
2
3
4
5
6
7
8
<tx:advice id="txAdvice" tansaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="list*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

配置切入点(where)

1
2
3
4
<aop:config>
<aop:pointcut expression="execution(* com.huawei.xx.service.*Service.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>

注解操作:

1:what:配置事务管理器

1
2
3
<bean id="txManager" class"...DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>

2:增加解析器

1
<tx:annotation-driven transaction-manager="txManager"/>

3:到service实现类上,使用Transactional注解

MVC注解:

注解:

Controller : 声明当前类为控制器,spring容器创建对象
RequestMapping : 贴在方法上,表示访问当前方法的URL.

使用:

1
2
3
4
5
6
7
8
@Controller
@RequestMapping("/hello")
public class HelloController{
@RequestMapping("/say")
public ModelAndView sayHello(){
return null;
}
}

此时的访问规则: http://localhost:8080/hello/say

AOP注解:

1
2
3
4
5
class LogAdvice{
public void writeLog(){
sout("记录日志...")
}
}

XML:

1
2
3
4
5
6
7
8
9
10
11
<!--what:-->
<bean id="logAdvice" class="..LogAdvice">

<aop:config>
<aop:aspect ref="logAdvice">
<!--where:-->
<aop:pointcut expression="execution(* cn.wolfcode.ssm.*Service.*(..))" id="logPointcut"/>
<!--when:-->
<aop:before method="writeLog" pointcut-ref="logPointcut"/>
</aop:aspect>
<aop:config>

使用注解:

注解:
Aspect 贴在增强类之上,表示一个切面
Pointcut 编写切入点表达式
Before 前置增强
AfterReturning
AfterThrowing
After
Around

解析器

1
2
3
4
<!-- 解析Component -->
<context:component-scan basePackage="cn.wolfcde.ssm"/>
<!--AOP注解解析器-->
<aop:aspectj-autoproxy/>

使用

1
2
3
4
5
6
7
8
9
10
11
12
@Component
@Aspect
class LogAdvice{

@Pointcut("execution(* cn.wolfcode.ssm.*Service.*(..))")
public void logPointcut(){}

@Before("logPointcut()")
public void writeLog(){
sysou("记录日志...")
}
}