黑马程序员技术交流社区

标题: 【成都校区】Spring框架day1 [打印本页]

作者: 你自己高兴就好    时间: 2019-6-5 18:43
标题: 【成都校区】Spring框架day1
        v Spring的简介
                Spring是分层的JavaSE/EE应用full-stack(全栈)轻量级开源框架,以Ioc和AOP为内核;提供了展现层SpringMVC(web层),持久层Spring JDBCTemplate(dao层)以及业务层事务管理等众多的企业级应用技术;整合众多的第三方框架和类库(技术选型的时候很看重该技术和Spring的集成程度)
                ○ 轻量级:框架小巧,api简单,学习成本低;
                ○ full-stack:各层都有对应的解决方案,在web层 业务层 dao层都有对应的解决方案
        v Spring之父:Rod Johnson
               
        v Spring框架在Maven中开发的框架结构
                                                                        w
               
        v Spring快速入门的开发步骤
                ○ 在Maven中导入Spring的坐标  Spring-context
                ○ 编写类
                ○ 在Spring的核心配置文件中配置Bean对象  核心配置文件可以是任意命名,习惯命名为applicationContext.xml
                ○ 测试
        v Spring核心配置文件的语法结构
                ○ Bean标签的基本配置
                ○ Spring实例化对象
                        § 原理:Spring的核心之一是Ioc ,即控制反转,就是将创建对象的权限交给Spring来创建,以达到类之间的松耦合的目的
                ○ Bean实例化的三种方式
                        A. 使用无参构造方法实例化
                                 语法:<Bean id ="userdao" class="cn.itcast.dao.impl.UserDaoImpl"></Bean>
                                         id :自由命名,在类中使用Ioc容器获取对象的时候,传入id属性来指定获取的是哪个对象
                                         class:类的全限定名称,也就是类的全路径
                        B. 工厂静态方法实例化
                                 原理:创建一个工厂类,是类中创建静态方法,方法的返回值类型是要创建的对象的类,在核心配置文件中需要先实例化工厂类,通过工厂类实例化Bean;
                                 语法:<Bean id="userdao" class="co.itcast.Factory"  factory-method="getUserDao"></Bean>
                        C. 工厂实例方法实例化
                                 原理:创建一个工厂类,类中的方法是非静态方法,方法返回值为要创建对象的类;先实例化工厂类,再通过工厂的对象实例化Bean
                                 语法:<Bean id="factory" class="cn.itcast.Factory"></Bean>
                                        <Bean   id="userdao" factory-bena="factory" factory-method="getUserDao"></Bean>
                                       
                                       
                                       
                ○ Bean标签的范围配置 scope属性
                        § 属性scope指对象的作用范围:取值有五种  
                                         singleton 默认的  单例的(配置文件被加载的同时创建对象)
                                         Prototype 多例的 在运行getBean方法的时候创建对象
                                         Session
                                         Request
                                         Golbal session
       
        v Bean的依赖注入
                ○ 概念
                        § 依赖注入是Spring的核心IocD 具体实现
                                § 在编写程序的时候,通过控制反战,将创建对象的权限交给Spring框架,但是在代码中不可能真的没有依赖关系,
                                IOC只是降低了依赖的关系,不能消除,例如,业务层还是会调用持久层的方法
                                这种依赖关系,使用Spring之后,就让Spring来维护
                ○ 依赖注入的方式
                        § 有参构造方法
                                § 在userserviceimpl中引入私有成员变量userdao;生成有参构造方法,userdao相当于构造方法中的一个参数
                                § 在配置文件中配置:
                                                <Bean id="userdao" class="cn.itcast.dao.impl.UserDaoImpl"/> <Bean id="usersercie" class="cn.itcast.service.impl.UserServiceImpl"> <Constructor-arg name="userDao" ref="userdao"></Constructor> </Bean>
                        § set方法
                                § 同样的要引入私有成员变量userdao,生成set方法,
                                § 在配置文件中配置:
                                                <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
                                                <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
                                                <property name="userDao" ref="userDao"/>
                                                </bean>
                                               
                ○ 依赖注入的数据类型
                        § 依赖注入的数据类型除了上面说的引用数据类型,还有普通数据类型 和集合数据类型
                        § 普通数据类型
                                § 配置:
                                        <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
                                          <property name="company" value="传智播客"></property>
                                          <property name="age" value="15"></property>
                                        </bean>
                        § 集合数据类型:
                                § list集合:
                                <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
                                  <property name="strList">
                                    <list>
                                      <value>aaa</value>
                                      <value>bbb</value>
                                      <value>ccc</value>
                                    </list>
                                  </property>
                                </bean>
                                ----------------------------------------------------------------
                                <bean id="u1" class="com.itheima.domain.User"/>
                                <bean id="u2" class="com.itheima.domain.User"/>
                                <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
                                  <property name="userList">
                                    <list>
                                      <ref bean="u1"/>
                                      <ref bean="u2"/>   
                                    </list>
                                  </property>
                                </bean>
                               
                                § Map<String,User >集合
                                        <bean id="u1" class="com.itheima.domain.User"/>
                                        <bean id="u2" class="com.itheima.domain.User"/>
                                        <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
                                          <property name="userMap">
                                            <map>      
                                              <entry key="user1" value-ref="u1"/>
                                              <entry key="user2" value-ref="u2"/>
                                            </map>
                                          </property>
                                        </bean>
                                       
                                § Properties集合
                                        <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
                                          <property name="properties">
                                            <props>
                                              <prop key="p1">aaa</prop>
                                              <prop key="p2">bbb</prop>
                                              <prop key="p3">ccc</prop>
                                            </props>
                                          </property>
                                        </bean>
                                       
        v 导入其他配置文件
                        § 在实际开发过程中Spring的配置非常多,会导致配置文件体积庞大,内容繁杂,所以可以将部分配置拆解到其他的配置文件中,在Spring的核心配置文件中通过import导入
                                applicationContext.xml
                                applicationContext-user.xml
                                在applicationContext.xml中通过impor标签导入applicationContext-user.xml
                               
                                <import source="applicationContext-user.xml"/>
                               
        v 核心配置文件application Context的继承体系
                        § applicationContext 是一个接口,其实现类有:
                                § ClassPathXmlApplicationContext
                                它是从类的根路径下加载配置文件,推荐使用这种
                                § FileSystemXmlApplicationContext
                                它是从磁盘路径下加载配置文件,可以在磁盘的任意位置
                                § AnnotationConfigApplicationContext
                                当使用注解配置容器对象的时候,需要使用此类来读取注解配置。
                               
        v getBean()方法使用
                        § getBean()方法的参数有两种:
                                § 参数为字符串:表示根据配置文件中Bean的id从容器中获取实例,返回时Object,需要强转;
                                § 参数为Class类型的:表示根据类型从容器中获取实例,当容器中有多个相同的类型的时,该方法就会报错
                               





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2