11.tomcat中如何设置spring容器的自动创建

一般情况下:使用于web项目
我们已此中方式获取ioc容器和启动spring容器!
ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml");
这种方法有较多弊端
1.spring容器启动时创建的各种bean在项目停止时,还在缓存中,因为垃圾回收机制不能立即清除
2.自己创建和启动的spring容器不能考虑很多问题:比如线程安全问题,多项目spring容器的共享问题等等
正确的创建方法是:使用于web项目,在web项目中配置监听器

1.pom文件中的示例;
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--数据库-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.24</version>
        </dependency>
        <!--spring基础包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.8</version>
        </dependency>
        <!--必须引入web的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
    </dependencies>
2.web.xml中的配置:
        <!--配置spring容器监听-->
        <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <!--配置spring配置文件位置-->
        <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:ioc.xml</param-value>
        </context-param>
3.spring配置文件中的内容:
    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <context:component-scan base-package="cn.com.wmd"></context:component-scan>
    </beans>
结论:
    在web项目启动时就示例化了对应的组件:输出:person的无参构构造器!
    
若在想任意的地方使用ioc容器可以这么做:
    public class Test {
        @org.junit.Test
        public void test(){
            WebApplicationContext ioc = ContextLoader.getCurrentWebApplicationContext();
            Person person = ioc.getBean("person", Person.class);
        }
    }

 

posted @ 2022-05-08 21:21  努力的达子  阅读(55)  评论(0编辑  收藏  举报