注解方式配置IOC
jar包:引入相关配置文件
log4j.properties
applicationContext.xml
引入约束:
spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html
引入约束:(引入context的约束):
编写相关的类:
public interface UserDao {
public void sayHello();
}
public class UserDaoImpl implements UserDao {
@Override
public void sayHello() {
System.out.println("Hello Spring...");
}
}
配置注解扫描
在相关的类上添加注解:
@Component(value="userDao")
public class UserDaoImpl implements UserDao {
@Override
public void sayHello() {
System.out.println("Hello Spring Annotation...");
}
}
编写测试类:
@Test
public void demo2() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.sayHello();
}
Spring的Bean管理的中常用的注解:
@Value :用于注入普通类型.@Autowired :自动装配:
默认按类型进行装配.
按名称注入:
@Qualifier:强制使用名称注入.
@Resource相当于:
@Autowired 和 @Qualifier 一起使用.
Bean的作用范围的注解:
@Scope :
singleton:单例
prototype:多例
Bean的生命周期的配置(初始化调用的方法和销毁调用的方法)
@PostConstruct :相当于init-method
@PreDestroy :相当于destroy-method
XML和注解:
XML :结构清晰.
注解 :开发方便.(属性注入.)
实际开发中还有一种XML和注解整合开发:
Bean有XML配置.但是使用的属性使用注解注入.
使用AspectJ进行AOP的开发:注解的方式
spring的传统AOP的开发的包spring-aop-4.2.4.RELEASE.jar
com.springsource.org.aopalliance-1.0.0.jar
aspectJ的开发包:
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar
引入Spring的配置文件
引入AOP约束:
编写目标类:
public class ProductDao {
public void save(){
System.out.println("保存商品...");
}
public void update(){
System.out.println("修改商品...");
}
public void delete(){
System.out.println("删除商品...");
}
public void find(){
System.out.println("查询商品...");
}
}
配置目标类IOC:
开启aop注解的自动代理:
AspectJ的AOP的注解:
@Aspect:定义切面类的注解通知类型:
@Before :前置通知
@AfterReturing :后置通知
@Around :环绕通知
@After :最终通知
@AfterThrowing :异常抛出通知.
@Pointcut:定义切入点的注解
编写切面类(@Before(可以直接写切入点的表达式,可以写一个类名.方法)切入点的表达式就是如果调用切入点的方法aop就会执行,如果是类名.方法那就是当配置的方法中的切入点执行AOP就会执行):
@Aspect
public class MyAspectAnno {
@Before("MyAspectAnno.pointcut1()")
public void before(){
System.out.println("前置通知===========");
}
@Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.save(..))")
private void pointcut1(){}
}
配置切面:
其他通知的注解:
@Aspect
public class MyAspectAnno {
@Before("MyAspectAnno.pointcut1()")
public void before(){
System.out.println("前置通知===========");
}
@AfterReturning("MyAspectAnno.pointcut2()")
public void afterReturning(){
System.out.println("后置通知===========");
}
@Around("MyAspectAnno.pointcut3()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("环绕前通知==========");
Object obj = joinPoint.proceed();
System.out.println("环绕后通知==========");
return obj;
}
@AfterThrowing("MyAspectAnno.pointcut4()")
public void afterThrowing(){
System.out.println("异常抛出通知========");
}
@After("MyAspectAnno.pointcut4()")
public void after(){
System.out.println("最终通知==========");
}
@Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.save(..))")
private void pointcut1(){}
@Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.update(..))")
private void pointcut2(){}
@Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.delete(..))")
private void pointcut3(){}
@Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.find(..))")
private void pointcut4(){}
}
spring注解配置junit测试
@RunWith :值为SpringJUnit4ClassRunner.class@ContextConfiguration :值为junit测试所需要的配置文件 格式classpath:路径/文件名
@Resource :测试类所需要调用的对象使用IOC注入
@Test :执行的方法
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext2.xml")
public class SpringDemo4 {
@Resource(name="accountService")
private AccountService accountService;
@Test
// 转账的测试:
public void demo1(){
accountService.transfer("会希", "凤姐", 1000d);
}
}
事务注解方式配置推荐使用
jar包配置事务管理器
开启事务管理的注解
在使用事务的类上添加一个注解(在类上添加注解表示所有本类下的所有方法都自动开启事务和提交,出现异常回滚,单方法上添加作用只在于单方法):@Transactional