Spring的组件扫描

Spring的组件扫描


通过组件扫描,可以不必在Spring的配置文件中配置各个`<bean>`,只需要配置好扫描哪些包(package),这些包下的类都将被Spring进行管理,等效于在Spring的配置文件中为这些包下的类都配置了`<bean id=?? class=??>`。


开启组件扫描只需要在Spring的配置文件中添加:


<context:component-scan
base-package="???" />


需要配置`base-package`属性,表示配置需要扫描的“根包”,例如配置为`cn.tedu.spring`,则在这个包下的所有类,及这个包的各层级子包(例如`cn.tedu.spring.dao`、`cn.tedu.spring.service`等)下的所有类,都会被扫描得到!


当开启组件扫描后,Spring可以扫描到对应的包,但并不会直接开始管理这些包下的所有类!对于那些希望被Spring管理的类,还必须明确的指出这些类是“组件”才可以!


在类的声明语句上方添加`@Componenet`注解,即表示这个类是“组件”!


在Spring中有常用注解有:


@Component:通用注解
@Named:通用注解
@Controller:对控制器进行注解
@Service:对业务逻辑类进行注解
@Repository:对持久层的类进行注解


其实,以上5种注解可以随意使用!这5种注解是等效的,只是语义不同!


如果注解只标记为`@Component`,不添加其它配置,则Spring会根据类的名称确定创建出来的对象的bean id,例如类名是`UserDao`,则bean id是`userDao`,即根据类名,将首字母小写。


如果需要自定义bean id,则在使用注解时,应该:`@Component("userDao")`。


**小结:使用组件扫描可以不必再配置<bean>,需要被Spring管理的类还应该添加注解,5种注解中仅@Named不常用,其它4种根据类的定位来使用!**




Spring中的其它注解


在此前配置`<bean>`时,还可以通过`scope`属性指定是否是单例的,取值可以是`singleton`或`prototype`,这样的配置也可以在类的声明语句上方添加`@Scope`注解来实现,例如:


@Scope("prototype")
@Repository("userDao")
public class UserDao {
}


此前配置某个Bean是否是懒汉式加载时,可以在Spring的配置文件中配置`lazy-init`属性,当使用注解时,可以使用`@Lazy`注解,并在注解中声明值,例如:


@Scope("singleton")
@Lazy(true)
@Repository("userDao")
public class UserDao {
}


此前的配置中还可以使用`init-method`和`destroy-method`配置生命周期方法,当使用注解后,可以使用`@PostConstructor`和`@PreDestroy`对对应的方法进行注解:


@Repository
public class UserDao {

@PostConstructor
public void onCreate() { }


@PreDestroy
public void onDestroy() { }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值