spring注解
使用 @Repository、@Service、@Controller 和 @Component 将类标识为 Bean,他们的作用,区别是什么?
在哪些情况下使用哪些?有哪些属性可以进行配置,这些属性的作用是什么?
@Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为 Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型;
在@Repository基础上扩展了@Service\@Controller\@Component声明Bean的方式;Spring 会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring 受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。
另外,除了上面的四个注解外,用户可以创建自定义的注解,然后在注解上标注 @Component,那么,该自定义注解便具有了与所 @Component 相同的功能。不过这个功能并不常用。
使用注解与之前的版本有什么优势,哪些情况下可以减少工作量?劣势又在哪里呢?
7个接口14种接口参数的文件封装,如果采用普通的接口方法实现方式,那么在处理方法类中需要引入很多的IF/ELSE判断和多个实现方法,复杂度增加。
(模板方法)通过引入接口类,存放具体实现类的工厂MAP,将实现类在数据库中与接口和产品进行配置,这样减少了方法的复杂度,且各实现逻辑互不影响;
@Autowired
private Map<String , GetEachInterfaceData(接口类)> getFileDetailMap
Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。
这样,当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。
当使用 byType 或者 constructor 类型的自动装配的时候,自动装配也支持引用类型的数组或者使用了泛型的集合,这样,Spring 就会检查容器中所有类型匹配的 Bean,组成集合或者数组后执行注入。对于使用了泛型的 Map 类型,如果键是 String 类型,则 Spring 也会自动执行装配,将所有类型匹配的 Bean 作为值,Bean 的名字作为键