Spring注解
2017-11-10 本文已影响0人
蕊er
1)引入相关配置文件
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--指定扫描base-package指定包名下的所有类中的注解,扫描时会扫描所有包下子孙类-->
<context:component-scan base-package="sd2.entity"/>
<bean id="zoo" class="com.bean.car" />
</beans>
2)常用注解
-
将对象注册到容器(作用在类上)
@Component(value = "user")
-
@Service( )
----业务层 -
@Controller()
----web层 -
@Repository()
----持久层
-
对象的作用范围注解
@Scope(scopeName = "prototype")
----单例对象(默认值),标识为单例的对象在spring容器中只会被创建一次@Scope(scopeName = "singleton")
----多例原型,被标识为多例的对象,每次获得时才会创建,每次创建时都是新的对象 -
属性注入的注解
-
@Value
//通过反射Field赋值,破坏对象封装性 @Value("肉丝") private String name; 或 //通过set方法赋值 @Value("肉丝") public void setName(String name) { this.name = name; }
-
@Autowired
@Resource
自动装配,默认按照类型进行匹配
如果存在相同类型的多个实例,则需要按名称注解则使用以下方式
@Autowired//自动装配 @Qualifier(value = "car") 或 @Resource(name = "car")
-
生命周期(应用于方法之上)
@PostConstruct
----在对象被创建之后调用@PreDestroy
----在对象被创建之前调用
-
3)junit与spring结合
测试时创建容器并且指定创建容器的配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDemo1 {
@Resource(name = "user")
private User user;
@Test
public void func1() {
System.out.println(user);
}
}
4)注解配置AOP
<!--配置目标对象-->
<bean class="com.spring.learn3.entity.UserServiceImpl" name="target"/>
<!--配置通知对象-->
<bean class="com.spring.learn3.entity.MyAdvice" name="advice"/>
<!--开启使用注解完成注入-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
//表示该类是一个通知类
@Aspect
public class MyAdvice {
//配置方法1
@Pointcut("execution(* com.spring.learn3.entity.*ServiceImpl.*(..))")
public void advice(){}
// 前置通知
@Before("MyAdvice.advice()")
public void before() {
System.out.println("这是前置通知");
}
//配置方法2
// 后置通知(如果出现异常不会通知)
@AfterReturning("execution(* com.spring.learn3.entity.*ServiceImpl.*(..))")
public void after() {
System.out.println("这是后置通知,如果出现异常不会调用");
}
}