Spring 零碎基础知识整理(一)

  1. @Component与@Component("name")
    区别:
    @Component("name"):相当于给这个组件Bean设置非默认的ID标识,并命名为name.
    @Componen 不加name的话,Bean的ID默认为类型的首字母小写。
  2. @ComponentScan
    表示:扫描当前类的包以及其子包,将标记@Component的类自动生成Bean。
  3. @ComponentScan("packagePath")
    当把配置集中放入某个地方时,@ComponentScan只能扫描当前类的包及其子包(基础包),声明在其他地方的component就无法扫描到了,因此需要加上("packagePath"),来指定扫描哪个基础包。
    多个包:
    @ComponentScan(basePackages={"packagePath1","packagePath2","packagePath"3})
    缺点:重构时,可能会出错。
    改进方法:使用包中的类或者接口名替代packagePath,如:
    @ComponentScan(basePackageClasses={ClassOne.class,ClassTwo.class}),这些类所在的包会被当做组件扫描时的基础包。

如果项目重构时,作为基础包的类型或者接口被移除了,那么重构时还是有风险,可以使用 空标记接口(marker interface)来指定扫描位置。
就是建一个空的接口,什么事都不干,将其作为基础包。这样,就不会引用项目的具体类了。

  1. @ContextConfiguration(classed=Xx.class)
    在何处加载配置

  2. @Autowired 与@Inject
    @Autowired是spring特有的注解。
    @Inject 来源于java依赖注入规范。
    大多数情况下,可以通用
    @Autowired(required=false)
    @Autowired可以用在类字段里,也可以标注在setter方法上。
    当标注为@Autowired时,会自己加载,如果没有匹配上,会报异常。设置为required=false,会尝试自动装配,如果没有匹配到bean,也不报异常。但是代码如果没有检测Null值的话,会报null pointer exception。

自动装配多个bean符合装配时的选择(装配歧义):

  1. @ResponseStatus(value,reason)
    应答状态,通常用于目标方法上,不管该方法有没有异常,都抛出指定的异常状态。
    如果没有异常,目标方法执行完毕。
    参数value表示异常状态,reason表示该异常的描述。

用在类上声明,则表示自定义的异常类。
通过throw new Class() 抛出。

  1. @ResponseBody
    用在控制器方法上,表示该方法返回一个对象,而不是路径。
    该对象是Json格式的对象。

你可能感兴趣的:(Spring 零碎基础知识整理(一))