Spring的组件扫描

Spring的组件扫描


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


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


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")`。


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




Spring中的其它注解


在此前配置``时,还可以通过`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() { }
}

你可能感兴趣的:(Spring的组件扫描)