spring 标注

1、添加支持标注的spring中的jar包:

spring-context.jar

spring-context-support.jar

2、在xml中配置命名空间和schema

<beans

     xmlns="http://www.springframework.org/schema/beans"

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns:aop="http://www.springframework.org/schema/aop"

     

     xmlns:context="http://www.springframework.org/schema/context"

     

     xsi:schemaLocation="http://www.springframework.org/schema/beans

     http://www.springframework.org/schema/beans/spring-beans.xsd

     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

     

     http://www.springframework.org/schema/context

     http://www.springframework.org/schema/context/spring-context.xsd">

3、启用基于注解的bean管理和依赖注入DI

    <context:component-scan base-package="com.spring1" />

表示,指定的基包以及子包都会纳入到spring的bean管理中。

4、Bean的注解(以下几种均可)

(1)dao里边的类一般用@Repository

(2)service里边的类一般用@Service

(3)其他的用@Component

aa

Spring mvc中的controller里边的类一般用@Controller

@Repository("dao")

@Scope("prototype")

@Lazy(true)

public class UserDao {

    

    public String showUser(){

            System.out.println("show");

            return "你好";

    }

}

加上了注解,就可以在bean中去掉了。

5、JSR330的注解

需要导入javax.inject.jar

(1)@Named注解,只要加入Named就可以加入bean的管理了。

6、IOC,DI的注解(一下三种选一种均可)

(1)set注入用@AutoWired

    @Autowired

    public void setUserDao(UserDao dao){

        this.userDao = dao;

    }

 (2)将@AutoWired加到被注入的属性上边,可以将set方法去掉

@Named

public class UserService {

    

    @Autowired

    private UserDao userDao;

    

    public void show(){

        userDao.showUser();

    }



}

(3)jsr330中使用@Inject注入方法

@Named

public class UserService {

    

    @Inject

    private UserDao userDao;

    

    public void show(){

        userDao.showUser();

    }



}

(4)jsr250中使用@Resource注入方法

@Named

public class UserService {

    

    @Resource

    private UserDao userDao;

    

    public void show(){

        userDao.showUser();

    }



}

7、AOP注解

首先在xml中加入以下内容,加入aspect切面支持。

<aop:aspectj-autoproxy/>

 

(1)在切面类上首先用@Named注解或者其他的加入Bean管理,再加上@Aspect注解表示切面类

@Aspect

@Named

public class MyAspect {

    

}

(2)定义切入点表达式,并加入@Pointcut(.......),包,类,方法,参数

@Aspect

@Named

public class MyAspect {

    

    @Pointcut("execution(* com.spring1.dao..*.*(..))")

    public void pointcut(){}

    

}

 (3)定义通知

@Named

@Aspect

public class MyAspect {

    

    @Pointcut("execution(* com.spring1.dao..*.*(..))")

    public void pointcut(){}

    

    @Before("pointcut()")

    public void beforeAdvise(){

        System.out.println("before");

    }

    @AfterReturning(pointcut="pointcut()",returning="o")

    public void afterReturningAdvise(Object o){

        System.out.println("after return");

    }

    

    @After("pointcut()")

    public void afterAdvise(){

        System.out.println("finally");

    }

    @AfterThrowing(pointcut="pointcut()",throwing="e")

    public void afterThrowningAdvise(Exception e){

        System.out.println("throwning");

    }

    

}

(3)仅定义环绕通知

@Named

@Aspect

public class MyAspect {

    

    @Pointcut("execution(* com.spring1.dao..*.*(..))")

    public void pointcut(){}

    

    @Around("pointcut()")

    public void aroundAdvise(ProceedingJoinPoint pjp){

        try{

            System.out.println("after");

            Object object = pjp.proceed();

            System.out.println("after returning");

        }catch(Throwable e){

            System.out.println("after throwning");

        }finally{

            System.out.println("after");

        }

    }

}

 

你可能感兴趣的:(spring)