Spring IOC 配置详解(2)

没有前缀 则根据当前实用的ApplicationConext实现类决定

"classpath*:"相对于"classpath:"的优势在于:如果有同包名的资源文件,分别打成了两个jar包【a.jarb.jar】。 用"classpath:"只加在a.jar中的资源文件。用"classpath*:"会加载a b两个jar包的配置文件

匹配符
? :一个字符
* :多个字符
** :多级目录

资源加载器
ResourceLoader:可以根据资源地址加载一个资源,但不支持匹配符
ResourcePatternResolver:支持匹配符
PathMatchingResourcePatternResolver:Spring的标准实现,也支持匹配符

public class ResolverTest { public static void main(String[] args) throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("classpath*:org/acy/**/*.xml"); for (Resource resource : resources) { System.out.println(resource.getFilename()); } } } 3 BeanFactory与ApplicationContext 3.1 BeanFactory解读

BeanFactory是一个工厂,用于创造各种类型的对象。
BeanFactory体系结构
BeanFactory:底层接口
ListableBeanFactory:增加访问容器中Bean基本信息的方法 如bean的个数,是否包含等。
HierarchicalBeanFactory:父子容器级联接口,使子容器可以访问父容器。
ConfigurableBeanFactory:重要接口,增强了IOC的定制化,加入了类装载器、属性编辑器、容器初始化后置处理器的方法
AutowireCapableBeanFactory:加入自动装配

测试

public class BeanFactoryTest { public static void main(String[] args) { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource resource = resolver.getResource("classpath:applicationContext.xml"); BeanFactory beanFactory = new XmlBeanFactory(resource); System.out.println("BeanFactory 初始化完成"); Car car = beanFactory.getBean("car", Car.class); System.out.println(car); } }

注:以上使用了XmlBeanFactory,其为上面那些接口的最终实现类。用BeanFactory会导致Bean在容器启动时候不会主动初始化,而是等到第一次使用时候在初始化。

3.2 ApplicationContext介绍

主要实现类有ClasspathXmlApplicationContext与FileSystemXmlApplicationContext,且ApplicationContext所有实现类都实现了ResourcePatternResolver接口,可以接受匹配符表达式加载资源文件。
并且ConfigurableApplicationContext还加入了refresh()和close(),用于刷新和关闭容器。
ApplicationContext是在容器启动时初始化所有Bean

注解配置

@Configuration public class Beans { @Bean(name = "car") public Car buildCar() { Car car = new Car(); car.setBrand("三轮车"); car.setColor("red"); car.setMaxSpeed(200); return car; } } public class AnnoTest { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(Beans.class); Car car = context.getBean("car", Car.class); System.out.println(car); } }

WebApplicationContext
WebApplicationContext是存储在ServletContext中,所有可以再任何代码中取出实用。
WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)

WebApplicationContext初始化
在Web.xml配置监听器
ContextLoaderListener

<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

如果不支持Listener,则可以使用ContextLoaderServlet

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2f81fa72595e7a712a8d1ef574b64122.html