一、IoC --> 基于注解的DI实现
@Component
定义Bean,value用于指定该bean的id值
不指定value属性,bean的id是类名的首字母小写
@Repository
持久层
用于对DaO实现类进行注解
@Service
业务层
用于对Service实现了进行注解
@Controller
控制层
用于对Controller实现类进行注解
@Value
简单类型属性注入
@Autowired
byType自动注入
@Autowired & @Qualifier
byName自动注入,需要两个注解联合使用
@Resource
JDK注解,可以按名称注入或按类型注入
默认:按名称注入
注解若不带任何参数,采用默认按名称的方式注入,按名称不能注入 bean, 则会按照类型进
行 Bean 的匹配注入。
指定其 name 属性,则 name 的值即为按照名称进行匹配的 Bean 的 id。
二、AOP
JDK 的动态代理,与 CGLIB 的动态代理。
Aspect:切面
JoinPoint:连接点
Pointcut:切入点
Target:目标对象
Advice:通知
AspectJ对AOP的实现
切入点表达式:
execution(modifiers-pattern? ret-type-pattern
declaring-type-pattern?name-pattern(param-pattern)
throws-pattern?)
前置通知
后置通知
环绕通知
异常通知
最终通知
application.xml中需添加
<aop:aspectj-autoproxy/>
通知 Spring 容器,让容器生成“目标类+ 切面”的代理对象。这个代理是由容器自动生成的。自动扫描到@Aspect 注解,并按通知类型与切入点,将其织入,并生成代理。
@Aspect
表示当前类是切面类
@Before
前置通知
属性:value 切入点表达式,表示切面执行的位置
位置:方法的定义上面
方法有JoinPoint参数,通过该参数,可获取切入点表达式、方法签名、 目标对象等。
@AfterReturning
后置通知
注解有returning属性
@Around
环绕通知
方法有ProceedingJoinPoint
@AfterThrowing
异常通知
注解有throwing属性
@After
最终通知
@Pointcut
定义切入点
将@Pointcut注解在一个方法之上,以后所有的 execution的 value 属性值均可使用该方法名作为切入点。代表的就是@Pointcut 定义的切入点。这个使用@Pointcut 注解的方法一般使用 private 的标识方法,即没有实际作用的方法。
三、Srping集成MyBatis
<context:property-placeholder location="classpath:"/>
Spring读取配置文件
<tx:annotation-driven transaction-manager=""/>
声明事物注解驱动
业务层public方法加入事物属性
@Transactional(
propagation = Propagation.REQUIRED,
rollbackFor = { NotEnoughException.class,NullPointerException.class})
AspectJ的AOP配置管理事务
容器中添加事务管理器
DataSourceTransactionManager
配置事务通知
<tx:advice id="myAdvice" transaction-manager="">
<tx:attributes>
......
</tx:attributes>
</tx:advice>
配置增强器
<aop:config>
<aop: id="myServictPt" pintcut expression="切入点表达式"/>
<aop:advisor advice-ref="myAdvice" pointcut-ref="myServictPt"/>
</aop:config>