Spring 注解配置
一、基于注解方式的IoC配置
在spring的配置文件中启用自动扫描受管组件(添加了IoC注解的类),它会扫描指定基本包及它下面所有子包中的所有类 <context:component-scan base-package="com.liqk"/>
常用的IoC注解类型:
@Component(“bean的别名”) //注解需要Spring管理的JavaBean类。如果不指定Bean的别 名,默认就是当前首字母小写的类名 针对企业分层架构,它还提供了几个子注解类型 a) @Repository(“bean的别名”) //注解持久层的 b) @Service(“bean的别名”) //注解业务层的 c) @Controller(“bean的别名”) //注解表示层的控制器的 @Scope(“singleton|prototype”) //指定Bean的生存范围 @Value(“值”) //值注入,Spring3.0以上版本才提供,可以使用Spring表达式。 @Autowired //使用byType自动注入引用。 可以放置在属性定义上(直接通过反射注入),也可以放置在属性对应的setter方法上(通过调用 set方法来注入),也可以放置构造方法上。 @Qualifier(“bean别名”) //明确指定要注入的Bean的名称。相当于byName方式 SUN公司的JSR-250标准中,也指定了几个IoC的注解类型
@Resource:默认使用byName自动注入 name属性:指定要装配的Bean的名(byName) type属性:指定要装配的Bean的类型(byType) @PostConstruct:注解的方法在类实例化后调用 @PreDestroy:注解的方法在类销毁之前调用
二、基于注解方式的AOP配置
启用Spring对AspectJ注解的支持: <aop:aspectj-autoproxy proxy-target-class="true"/>
常用的AOP注解类型:
@Aspect:注解一个类为切面类。 注意:被注解为切面的类首先要是一个受spring管理的bean @Pointcut(“AspectJ切入点表达式”):定义一个可重用的切入点(切入点的标识名为方法名加 括号)。这个注解一般放置在切面类中一个无用方法上。 @通知类型(“值”):定义通知。 a) 通知类型有:@Before、@AfterReturning、@AfterThrowing、@After b) 值可以是已命名(放置了@Pointcut注解的方法名())切入点的引用,也可以是一个切入点表达式
三、使用java配置类来进行Ioc和AOP的配置
IoC配置
使用@Configuration注解定义在Java类上,来代替XML配置文件 使用@ComponentScan注解代替XML配置文件中的context:component-scan元素 示例:
@Configuration
@ComponentScan ( basePackages= "cn.itvk" )
public class AppConfig {
}
创建Spring应用上下文对象:
ApplicationContext context = new
AnnotationConfigApplicationContext ( AppConfig. class ) ;
context. getBean ( Xxx. class ) ;
@Bean定义在Java配置类的某个方法上,来显式声明一个受管Bean组件。代替XML配置文件中的 <bean>元素 @Bean告知Spring这个方法将返回一个对象,该对象应该被注册为Spring应用上下文中的一个 Bean。方法名作为该Bean的ID @Bean一般用来定义在其它第三方jar包中写好的类,又需要交给spring来管理的类。 示例:
@Configuration
@ComponentScan ( basePackages= "cn.itvk" )
public class AppConfig {
@Autowired private UserService userService;
@Bean public TestBean testBean ( ) {
TestBean tb = new TestBean ( ) ;
tb. setName ( "张三" ) ;
tb. setUserService ( userService) ;
return tb;
}
@Bean public TestBean2 testBean2 ( ) {
TestBean2 tb2 = new TestBean2 ( ) ;
tb2. setTestBean ( testBean ( ) ) ;
return tb2;
}
}
使用@Import注解可以在Java配置类中导入其它的Java配置类,代替XML配置文件中元素 使用@ImportResource注解可在Java配置类中导入其它XML配置文件。 使用@PropertySource注解可在Java配置类中导入Properties文件中的Key-Value对。
2. AOP配置
通过@EnableAspectJAutoProxy注解定义在Java配置类上,来代替XML配置文件中的@Configuration
@ComponentScan ( basePackages= "cn.itvk" )
public class AppConfig {
}
ApplicationContext context = new
AnnotationConfigApplicationContext ( AppConfig. class ) ;
context. getBean ( Xxx. class ) ;
@Configuration
@ComponentScan ( basePackages= "cn.itvk" )
public class AppConfig {
@Autowired private UserService userService;
@Bean public TestBean testBean ( ) {
TestBean tb = new TestBean ( ) ;
tb. setName ( "张三" ) ;
tb. setUserService ( userService) ;
return tb;
}
@Bean public TestBean2 testBean2 ( ) {
TestBean2 tb2 = new TestBean2 ( ) ;
tb2. setTestBean ( testBean ( ) ) ;
return tb2;
}
}