Spring 注解配置

Spring 注解配置

一、基于注解方式的IoC配置

  1. 在spring的配置文件中启用自动扫描受管组件(添加了IoC注解的类),它会扫描指定基本包及它下面所有子包中的所有类
    <context:component-scan base-package="com.liqk"/>
  2. 常用的IoC注解类型:
    1. @Component(“bean的别名”) //注解需要Spring管理的JavaBean类。如果不指定Bean的别
      名,默认就是当前首字母小写的类名
      针对企业分层架构,它还提供了几个子注解类型
      a) @Repository(“bean的别名”) //注解持久层的
      b) @Service(“bean的别名”) //注解业务层的
      c) @Controller(“bean的别名”) //注解表示层的控制器的
    2. @Scope(“singleton|prototype”) //指定Bean的生存范围
    3. @Value(“值”) //值注入,Spring3.0以上版本才提供,可以使用Spring表达式。
    4. @Autowired //使用byType自动注入引用。
      可以放置在属性定义上(直接通过反射注入),也可以放置在属性对应的setter方法上(通过调用
      set方法来注入),也可以放置构造方法上。
    5. @Qualifier(“bean别名”) //明确指定要注入的Bean的名称。相当于byName方式
  3. SUN公司的JSR-250标准中,也指定了几个IoC的注解类型
    1. @Resource:默认使用byName自动注入
      name属性:指定要装配的Bean的名(byName)
      type属性:指定要装配的Bean的类型(byType)
    2. @PostConstruct:注解的方法在类实例化后调用
      @PreDestroy:注解的方法在类销毁之前调用

二、基于注解方式的AOP配置

  1. 启用Spring对AspectJ注解的支持:
    <aop:aspectj-autoproxy proxy-target-class="true"/>
  2. 常用的AOP注解类型:
    1. @Aspect:注解一个类为切面类。 注意:被注解为切面的类首先要是一个受spring管理的bean
    2. @Pointcut(“AspectJ切入点表达式”):定义一个可重用的切入点(切入点的标识名为方法名加
      括号)。这个注解一般放置在切面类中一个无用方法上。
    3. @通知类型(“值”):定义通知。
      a) 通知类型有:@Before、@AfterReturning、@AfterThrowing、@After
      b) 值可以是已命名(放置了@Pointcut注解的方法名())切入点的引用,也可以是一个切入点表达式

三、使用java配置类来进行Ioc和AOP的配置

IoC配置

  1. 使用@Configuration注解定义在Java类上,来代替XML配置文件
  2. 使用@ComponentScan注解代替XML配置文件中的context:component-scan元素
  3. 示例:
@Configuration
@ComponentScan(basePackages="cn.itvk")
public class AppConfig {
}
  1. 创建Spring应用上下文对象:
ApplicationContext context = new
AnnotationConfigApplicationContext(AppConfig.class);
context.getBean(Xxx.class);
  1. @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;
}
}
  1. 使用@Import注解可以在Java配置类中导入其它的Java配置类,代替XML配置文件中元素
    使用@ImportResource注解可在Java配置类中导入其它XML配置文件。
    使用@PropertySource注解可在Java配置类中导入Properties文件中的Key-Value对。

2. AOP配置

  1. 通过@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;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值