Spring系列之常用接口,抽象类,工具类

Spring常用接口

  1. Ordered
    有两个常量int HIGHEST_PRECEDENCE = Integer.MIN_VALUE; int LOWEST_PRECEDENCE = Integer.MAX_VALUE;,数值越大优先级越低,数值相同时优先级随机。一个方法int getOrder();
  2. InitializingBean
    只有一个afterPropertiesSet方法,在Bean的属性都设置值后被调用,用于完成一些初始化工作。能够实现相同功能的其他两种方式:@PostContsuct注解,Spring的配置文件init-method。三种方式的执行顺序优先级:注解 > InitializingBean接口实现类 > init-method。相应的方法中不要编写一些复杂且执行时间很长的逻辑。
  3. DisposableBean
    只有一个destroy方法,在Bean被销毁、生命周期结束之前被调用,用于做一些销毁的收尾工作。能够实现相同功能的其他两种方式:@PreDestory注解,Spring的配置文件destroy-method属性。三种方式的执行顺序优先级:注解 > DisposableBean接口实现类 > destroy-method
  4. Aware
    一个最顶层的标记接口,即没有任何方法,通过上下文Context可以获得当前环境。
  5. ApplicationContextAware
    只有一个setApplicationContext方法,在该Bean被加载的过程中获取Spring的应用上下文ApplicationContext实例,进而可以获取Spring容器内的很多信息。
  6. FactoryBean
    通过实现getObject方法,加载想要的Bean,完成bean实例化的个性定制。
    在Spring源码中,其实现类如ProxyFactoryBean,用于创建bean的AOP代理,JndiObjectFactoryBean,用于从JNDI中查找对象。
  7. BeanPostProcessor
    有两个方法: postProcessBeforeInitialization和postProcessAfterInitialization。在每个Bean初始化,即调用setter之前和之后的后处理,用于实现初始化的逻辑控制。
  8. BeanFactoryPostProcessor
    只有postProcessBeanFactory方法,在Bean被创建之前,获取容器中Bean的定义信息,并且可以进行修改。实现类中的postProcessBeanFactory方法只会被执行一次,且先于BeanPostProcessor接口的方法。
  9. BeanFactoryAware
    只有一个setBeanFactory方法,用于获取在该Bean被加载的过程中加载该Bean的BeanFactory,同时也可以获取这个BeanFactory中加载的其它Bean。
  10. InstantiationAwareBeanPostProcessor
    常用的方法是postProcessBeforeInstantiation和postProcessAfterInstantiation。每个Bean的实例化(即调用构造函数)之前和之后,会分别调用该实现接口类中的这两个方法。
  11. ApplicationListener
    只有一个onApplicationEvent方法,用于需要监听自定义事件时。要发布自定义事件,调用ApplicationContext的publishEvent方法。
  12. BeanNameAware
    用于需要获取bean自身在容器中的id/name时。
  13. Resource
    集成InputStreamSource,提供操作资源的若干方法。实现类如FileSystemResource提供对文件系统绝对路径下的资源进行访问;ClassPathResource提供对classpath类路径下资源的访问;ServletContextResource提供web应用中对Web应用根目录下的资源的访问。

注解

  1. @Autowired:自动装配
  2. @Value:注入SpEL表达式,可用于字段或者方法参数上
    @Value(value = "#{'Hello Spring!!!'[0]}")
    private String myName;
    @Value("#{@systemProperties}")
    private Properties pros;
    @Value("#{1==1 ? true : false}")
    private Boolean b1;
    @Value("#{'no'}")
    private Boolean b2;
    @Value("#{'on'}")
    private Boolean b3;
    @Value("#{ new double[]{100,44,3.1415,0.4432} }")
    private Double[] nums;
  1. @Qualifier:限定描述符,用于按类型自动装配时有多个同类型的bean时,规定选择某一个特定名称的bean
  2. @PostConstruct:bean初始化之前调用的方法,等同于XML配置的init-method
  3. @PreDestroy:bean销毁之前调用的方法,等同于xml配置的destroy-method
  4. @Component(“myBeanA”),初始化bean的名字默认是类名第一个字母小写。下面三个注解都是@Component的扩展注解(即源码中引入@Component)
  5. @Controller,表示层
  6. @Service,业务逻辑层
  7. @Repository,数据访问层
  8. @Lazy(false) 延迟初始化
  9. @DependsOn(“myBeanB”) 定义Bean初始化及销毁时的顺序
  10. @Scope(“prototype”) 修改bean的scope,默认单例singleton
  11. @Primary 自动装配时当出现多个Bean候选者时,将作为首选者
  12. @ManagedBean注解及自定义扩展:@ManagedBean注解,需要在应用服务器环境使用(如Jboss),自定义扩展部分是为了配合Spring自带的模式注解扩展自定义的,并不包含在Java EE 6规范中,在Java EE 6中相应的服务层、DAO层功能由EJB来完成。
  13. @Named注解及自定义扩展,可用于类型、字段、方法参数
  14. @ManagedBean和@Named用法可以参考博客:http://jinnianshilongnian.iteye.com/blog/1461055

常用的Bean的配置元数据:@Lazy,@DependsOn,@Scope,@Qualifier,@Primary

抽象类

  1. ApplicationEvent
    用于创建自定义事件

Spring框架工具类

大部分位于包org.springframework.util下,类名以Utils结尾的工具类。也有位于*.util.下面的类,如HtmlUtils。也有位于*.support.下面的类,如 EncodedResource。其他散乱在别的包名之下。

// 支持classpath:和file:的地址前缀
ResourceUtils.getFile("classpath:conf/awesome.txt");
// 将文件内容拷贝到一个目标byte[]、String甚至一个输出流或输出文件中
FileCopyUtils.copy(Resource.getFile, new File(Resource.getFile(), getParent() + '目标文件名'));
// 直接通过基于类路径的文件地址加载属性资源  
PropertiesLoaderUtils.loadAllProperties("awesome.properties");
// Resource只能用于默认操作系统的编码格式进行加载资源。EncodedResource实现InputStreamSource,支持指定编码格式加载,常用于解决乱码问题
EncodedResource res = new EncodedResource(res,"UTF-8");
// 访问Spring容器,获取容器中的Bean
ServletContext sc = request.getSession().getServletContext();
WebApplicationContextUtils.getWebApplicationContext(sc);
// js转义
JavaScriptUtils.javaScriptEscape(String str);
// html转义
HtmlUtils.htmlEscape(String str);// 转换为HTML转义字符表示
HtmlUtils.htmlEscapeDecimal(String str); // 转换为数据转义表示
HtmlUtils.htmlEscapeHex(String str); // 转换为十六进制数据转义表示
HtmlUtils.htmlUnescape(String str); // 将经过转义内容还原

参考

文件资源操作和 Web 相关工具类

原创文章 131 获赞 175 访问量 32万+

猜你喜欢

转载自blog.csdn.net/lonelymanontheway/article/details/104421346
今日推荐