Spring注解
常用注解
-
@Autowired : 自动装配
-
@Resource : java自带的自动装配注解
-
@Qualifier : 配合@Autowired使用,@Qualifier(value=" ")指定唯一的bean对象注入
-
@Nullable : 字段标注该注解表示该字段可以为空
xml*
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <bean id="cat1" class="com.wang.entity.Cat"/> <bean id="cat2" class="com.wang.entity.Cat"/> <bean id="dog1" class="com.wang.entity.Dog"/> <bean id="dog2" class="com.wang.entity.Dog"/> <bean id="people" class="com.wang.entity.People"/> </beans>
实体类
public class People { @Autowired @Qualifier(value="cat1") private Cat cat; @Autowired @Qualifier(value="dog1") private Dog dog; private String name;
测试类
public class MyTest { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); People people = context.getBean("people", People.class); people.getDog().shout(); people.getCat().shout(); } }
-
@Component : 组件,放在类上说明该类被spring管理了,就是bean!
-
@Component的衍生注解(三层架构中) : Dao层:@Reposit service层:@Service Controller层:@Controller (说明:这四个注解都是一样的,都是代表将某个类注入到Spring中装配到bean中,只是为了更好的区分不同的层)
-
@value : 写在属性上,实现属性的注入
-
@Scope : 规定bean的作用域,prototype为原型模式,singleton为单例模式
-
@Configuration : 代表这个类是配置类,相当于xml文件
-
@ComponentScan : 扫描组件, 相当于<context:component-scan base-package=“com.wang.entity”/>
Config类
@Configuration @ComponentScan("com.wang.entity") public class MyConfig { //.xml文件中:<bean id="Student" class="com.wang.entity.User"> //注解@Bean就相当于我们写的Bean标签 //方法名就相当于id的属性 //返回值相当于class属性 @Bean public User user() { return new User(); } }
实体类
@Component public class User { @Value("滴滴") public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
测试类
public class MyTest { @Test public void test(){ ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class); User user = (User) context.getBean("user"); System.out.println(user.getName()); } }
AOP注解
再xml文件中开启注解支持:
<!-- 开启注解支持-->
<aop:aspectj-autoproxy/>
-
@Aspect : 将当前类标识为一个切面供容器读取
-
@Before : 标识一个前置增强方法
-
@After : final增强,不管是抛出异常或者正常退出都会执行
@Aspect public class AnnonationPointCut { @Before("execution(* com.wang.service.UserserviceImpl.*(..))") public void before() { System.out.println("方法执行前"); } @After("execution(* com.wang.service.UserserviceImpl.*(..))") public void after() { System.out.println("方法执行后"); } }
-
@Around : 环绕增强
-
@AfterReturning : 后置增强,方法正常退出执行
-
@AfterThrowing : 异常抛出增强