spring学习总结(二)

来源:互联网 发布:飞思卡尔单片机与pic 编辑:程序博客网 时间:2024/06/15 15:14

第二讲

一、两种后处理器:spring允许通过后处理器对IOC容器进行扩展。

  1. Bean后处理器:对容器中的Bean进行后处理,对Bean进行额外的加强。
    1. 需要实现一个接口BeanPostProcessor接口,包含两个方法:Object postProcessBeforeInitialization(Object bean,String name)Object postProcessAfterInitialization(Object bean,String name)
  2. 容器后处理器:对IOC容器进行后处理,用于增强容器功能。
    1. 需要实现接口postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory),无返回值。

二、注解

  1. @Component:注释一个普通的spring bean类。
  2. @Controller:标注一个控制器组件类。
  3. @Service:标注一个业务逻辑组件类。
  4. @Repository:标注一个DAO组件类。

三、使用注解的时候,需要在xml中配置扫描的路径(包的路径):<context:component-scan base-package=”cc.wsyw126”/>

四、可以在component-scan中使用

  1. <context:include-filter type=”regex” expression=”.*Chinese”/>:指定满足该规则的Java类会被当做一个bean类被管理。
  2. <context:exclude-filter type=”regex” expression=”.*Chinese”/>:指定满足该规则的Java类不会被当做一个bean类被管理。

五、使用@Scope(“prototype”)来标注bean的作用域为prototype。默认为singleton。

  1. 也可以自定义解析器实现ScopeMetadataResolver接口,并提供自定义的作用域解析策略,然后在配置扫描器时指定解析器的全限定类名即可:scope-resolver=”全限定类名”

六、@Resource(name=”id”):配置依赖。

  1. 可以标注在setter方法上。省略name属性时,name属性的值为去掉set,首字母小写后得到的字符串。
  2. 也可以标注在实例变量上()。省略name属性时,name属性的值为同实例变量同名。

七、生命周期行为

  1. @PostConstruct:作用同init-method。
  2. @PreDestroy:作用同destroy-method。

八、@DependsOn(“一个或多个依赖的对象ID”):用于强制初始化其他Bean。

九、@Lazy(“一个boolean型的值”):用于指定Bean是否取消预初始化。

十、@Autowired:可以修饰setter方法、普通方法、实例变量、构造器等。

  1. 当Autowired修饰setter方法时:默认采用byType自动装配策略。
    1. 找到一个,注入;多个,报异常;没有,什么都不做;
  2. Spring4.0之后的Autowired可以根据泛型进行自动。
  3. 修饰类A的集合属性时,spring会搜索容器中类A所有的实例,并以这些实例创建集合。
  4. 使用@Autowired@Qualifier(“bean的ID”)可以根据指定的Bean的ID进行装配。(不如直接使用@Resource执行依赖注入)
    1. @Qualifier可以和@Autowired一起放在实例变量之上,也可以不放在一起,放在setter的参数之前,而@Autowired放在实例变量之上。

十一、资源访问:访问各种类型的文件、二进制流等。

  1. UrlResource:访问网络资源的实现类。
  2. ClassPathResource:访问类加载路径里资源的实现类。
  3. FileSystemResource:访问文件系统里资源的实现类。
  4. ServletContextResource:访问相对于ServletContext路径下的资源的实现类。
  5. InputStreamResource:访问输入流资源的实现类。
  6. ByteArrayResource:访问字节数组资源的实现类。

十二、Spring提供了ResourceLoader和ResourceLoaderAware接口,在实现类中有getResource(String location)方法,获取Resource实例。

十三、访问资源时,也可以不理会ApplicationContext的实现类,强制指定ClassPathReource、FileSystemResource等实现类。通过不同的前缀指定:

  1. classpath:以ClassPathReource实例访问本地文件系统的资源。
  2. file:以UrlResource实例访问本地文件系统的资源。
  3. http:以UrlResource实例访问基于http协议的网络资源。
  4. 无前缀:由ApplicationContext的实现类来决定访问策略。
  5. 例子:Resource r = ctx.getResource(“classpath:beans.xml”);

十四、使用Resource作为属性:使用依赖注入。在xml配置中添加p:res=”classpath:beans.xml”

十五、在ApplicationContext中使用资源:

  1. 使用ApplicationContext实现类指定访问资源。
  2. 使用前缀指定访问资源。
  3. “Classpath*:beans.xml”:提供加载多个XML配置文件的能力。系统将搜索类加载路径,找出与文件名匹配的文件,分别加载文件中的配置,最后合并为一个ApplicationContext。注意:该方法仅对ApplicationContext有效,对Resource实例无效。
  4. “file:xxx”前缀:来区分相对路径和绝对路径。
    1. new FileSystemXmlApplicationContext(“file:beans.xml”); 相对路径。
    2. new FileSystemXmlApplicationContext(“file:beans.xml”); 绝对路径。
0 0
原创粉丝点击