spring&Junit测试&注解配置IOC和AOP以及事务

注解方式配置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

转载于:https://www.cnblogs.com/sybk/p/10004729.html

你可能感兴趣的:(spring&Junit测试&注解配置IOC和AOP以及事务)