day25 spring初始

IOC : https://blog.csdn.net/ivan820819/article/details/79744797
软件设计六大原则 : http://www.uml.org.cn/sjms/201211023.asp#5
低耦合 : https://blog.csdn.net/ellis1970/article/details/84302912

Spring 的核心是控制反转(IOC)/依赖注入(DI)和面向切面(AOP)。
    是一个分层的轻量级开源框架。

@Before:初始化方法   对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)
@After:释放资源  对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所有方法执行一次)


创建项目:
    1.创建maven项目
    2.引入spring的依赖
        <properties>
                <maven.compiler.source>8</maven.compiler.source>
                <maven.compiler.target>8</maven.compiler.target>
                <spring.version>4.2.5.RELEASE</spring.version>
            </properties>   

                    <!--Spring核心基础依赖-->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-expression</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <!--日志相关-->
                <dependency>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                    <version>1.2</version>
                </dependency>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.17</version>
                </dependency>
                <!--测试相关-->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                    <scope>test</scope>
                </dependency>
    
    3.添加配置文件
        建议设置为 applicationContext.xml 的文件名

        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        </beans>

    4.添加相应的模块
        dao、model、service层代码


        注:utils层:存放一些数据库的数据

            Dao层(mapper层):与数据库进行交互,增删改查
            Service层(业务层、biz层):实现操作的具体方法,逻辑处理,调用dao层方法
            Controller层(控制层、action层):控制业务逻辑,接收数据

            entity层(实体层、domain层、pojo层、model层):定义实体、定义各个属性及他们的getset
            view层:与controller层联系紧密,负责前台jsp页面表示

    5.将bean的实例化交给spring
        <bean name="userDao" class="com.tledu.spring.dao.impl.UserDaoImpl" />
        <!--name 属性名字/ref 引用的bean的名字-->
        <bean id="userService" class="com.tledu.spring.service.UserService">
            <property name="userDao"  ref="userDao" />
        </bean>

    6.测试类
        public class UserServiceTest {

            @Test
            public void add() {
                ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                        "applicationContext.xml");
                // userService是bean的id或name
                UserService userService = (UserService) applicationContext
                        .getBean("userService");
                userService.add(null);
            }
        }

注入方法
    1.set注入
        <property name="userDao" ref="userDao" />

    2.通过构造方法注入
        <bean name="userDao" class="com.tledu.spring.dao.impl.UserDaoImpl" />
        <bean id="userService" class="com.tledu.spring.service.UserService">
            <constructor-arg ref="userDao"/>
        </bean>
    
    注:ref是引入,value是直接填值

scope
    对象在spring容器中的创建方式。

    有singleton(单例模式)和prototype(“多例模式”:每一次getBean 都会创建一个新的实例化对象)两种,
        以及实用于web程序的request,session和global session类型

集合属性注入
    相关类
        private List<String> lists;
        private Set<String> sets;
        private Map<String, String> maps;
        public List<String> getLists() {
            return lists;
        }
        public void setLists(List<String> lists) {
            this.lists = lists;
        }
        public Set<String> getSets() {
            return sets;
        }
        public void setSets(Set<String> sets) {
            this.sets = sets;
        }
        public Map<String, String> getMaps() {
            return maps;
        }
        public void setMaps(Map<String, String> maps) {
            this.maps = maps;
        }

    配置文件
        <bean name="userDao" class="com.tledu.zrz.dao.impl.UserDaoImpl">
            <property name="lists" >
                <list>
                    <value>1</value>
                    <value>2</value>
                </list>
            </property>
            <property name="sets" >
            <!-- set不可重复,重复不添加,所以只有第一个三 -->
                <set>
                    <value>3</value>
                    <value>3</value>
                    <value>5</value>
                    <value>4</value>
                </set>
            </property>
            <property name="maps">
            <!-- mapkey不可重复,重复key不添加,value覆盖 -->
                <map>
                    <entry key="1"  value="2"></entry>
                    <entry key="1"  value="3"></entry>
                    <entry key="2"  value="2"></entry>
                </map>
            </property>
                </bean>

                <bean id="userService" class="com.tledu.zrz.service.UserService"
            scope="singleton">
            <!-- 构造方法注入 -->
            <constructor-arg>
                <ref bean="userDao" />
            </constructor-arg>
        </bean>

自动装配
    1.byName是根据setter方法名字进行匹配,如果找不到,就不赋值
    设置方式
        <bean name="userDao" class="com.tledu.zrz.dao.impl.UserDaoImpl"></bean>
        <bean id="userService" class="com.tledu.zrz.service.UserService"  autowire="byName"></bean>

    2.byType是根据setter方法的参数列表中的数据类型进行匹配,如果beans.xml中出现了多个相同类型的对象,就会报错
    设置方式
        <bean name="userDao" class="com.tledu.zrz.dao.impl.UserDaoImpl"></bean>
        <bean id="userService" class="com.tledu.zrz.service.UserService"  autowire="byType"></bean>

生命周期
    servlet的生命周期,构造方法 -- init -- service -- destroy  
    spring类似

    配置文件
        <!--  init-method : 用于设置初始化的方法
            destory-method : 用于设置销毁资源的方法 -->
        <bean id="userService" class="com.tledu.zrz.service.UserService"  
            autowire="byName"   init-method="init" destroy-method="destroy"  >
        </bean>

    相关类
        public void init(){
            System.out.println("init--------");
                }
                public void destroy(){
            System.out.println("destroy----------");
                }
                public UserService() {
            System.out.println("service构造方法");
        }

    默认的单例模式中,Destroy会默认执行。这个时候对象的生命周期会和Spring容器的生命周期绑定到一起,
        所以当我们销毁Spring容器的时候,会把所有的对象销毁,并自动调用destroy方法

    prototype时,对象的生命周期就不会再和Spring容器绑定,销毁Spring容器的时候也就不会再执行该对象的destroy方法

迟加载:不想让某个类在解析的时候就创建对象,而是用到的时候在创建对象
    配置文件:
        <bean name="userDao" class="com.tledu.zrz.dao.impl.UserDaoImpl" >
        <bean id="userService" class="com.tledu.zrz.service.UserService"  scope="prototype"
            autowire="byName"   init-method="init" destroy-method="destroy" lazy-init="true"  >
        </bean>

    我们可以在beans标签中添加default-lazy-init="true" 对所有的bean进行迟加载  
    default-lazy-init 和 lazy-init 可以同时存在,比如 10个对象中 只有一个不需要迟加载,
     那么可以使用 default-lazy-init = true 全部设置迟加载,然后再去指定的bean中添加 lazy-init=false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值