day1


Spring

IOC 和 AOP 为内核

IOC inverse of control 控制反转
AOP aspect oriented programing 面向切面编程

展现层 WEB

SpringMVC

持久层 DAO

Spring JDBCTemplate

业务层 SERIVICE

事务管理

Spring发展

  • Rod Johns Spring之父
  • 学习Spring5.0.5

Spring优势

  • 方便解耦,简便开发
    • 对象创建权给Spring完成 对象放在容器中
  • AOP 编程支持
    • 面向切面编程
  • 声明式事务控制
    • 配置的方法
  • 方便程序的测试
  • 继承众多优秀框架
  • 降低JavaEE的使用难度
    • Spring对JavaEEAPI进行了封装层 模板Template
  • Java源码是经典的学习典范

Spring体系结构

CoreContainer

Beans 容器产生对象
Core 核心
Context 行下文
SpEL SpringExpressionLanguage Spring表达式语言
AOP

切面

dataAccess
Web

Spring程序开发步骤

  • 导入Spring基本包
  • 编写Dao接口及其实现
  • 创建Spring核心配置文件
  • 在Spring配置接口

IOC

  • 编写需要放入容器中的类
  • 创建XML配置文件,文件名习惯为applicationContext.xml
  • 利用Bean标签将需要的对象放入bean容器中,id随便取,class为需要装入容器中的类的全包名,spring内部会通过classname.class.getContructor().newInstance()创建实例对象,无参构造创建
     <bean id="UserDao" class="cn.gyk.dao.Impl.UserDaoImpl"/>

id 是唯一性表示,不允许重复
class 全限定名

Bean标签的范围设置 scope属性

  • singleton 单一的唯一的,用的是设计模式里面的单例模式,容器之中对象唯一
  • prototype 多例的 ,每次getbean都会创建一个新的对象
  • request
  • session
  • global session

以上三种会把对象放到容器的同时也会把对象放到相应的request、sessioni、全局session域中方便获取,配置需要在web环境下

单元测试

  • Junit单元测试
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>

Bean的创建时机

  • 从容器中获取的对象是使用无参构造函数,在无参构造函数中打印一句话方便查看对象的创建时机
  1. scope 设置为 singleton 时 当加载配置文件创建spring容器的时候设置为singleton的对象就创建 因为是单例模式,所以在初始化容器的时候就创建所有的单例对象,这个对象有切仅有一个
  • 创建时机:当配置文件被加载时,对象就被创建了
  • 对象运行:只要容器在,对象就一直在内存中
  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁了
  1. scope 设置为 prototype bean的创建时机是在getBean时才创建
  • 创建实际: 当使用对象时(getBean),创建新的对象实例
  • 对象运行:只要在使用对象就一直存在
  • 对象销毁:对象长时间不适用,被Java垃圾回收机制回收

Bean生命周期配置

  • init-method 指定类的初始化方法
  • destory-method 指定类的销毁方法
	//在对象的类中添加两个方法,名字随便
    public void init(){
        System.out.println("initialized...");
    }
    public void destroy(){
        System.out.println("destroy...");
    }
 <!-- 通过在xml配置文件中配置方法 -->
 <bean id="UserDao" class="cn.gyk.dao.Impl.UserDaoImpl"scope="prototype" init-method="init" destroy-method="destroy"/>

Bean实例化的三种方式

  • 无参构造方法实例化
  • 工厂静态方法实例化
//创建对象那个的工厂方法
	public class StaticFactory {
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
<!-- xml 文件配置更改-->
    <bean id="UserDao" class="cn.gyk.factory.StaticFactory" factory-method="getUserDao" scope="singleton" />
  • 通过factory-method属性指定生成对象的工厂方法

  • 工厂实例方法实例化

  • 这种方法需要现有工厂对象才能调用方法

    1. 先把工厂对象放到Spring容器中,Spring通过无参构造创建工厂对象
  • <bean id="DynamicFactory" class="cn.gyk.factory.DynamicFactory" scope="singleton"/>
    
    1. 再配置获取UserDao的Bean
  • <bean id="UserDao" factory-bean="DynamicFactory" factory- +method="getUserDao"/>
    

factory-bean是指定再Spring容器中的工厂方法,factory-method是指定工厂方法中创建对象的方法

内容来源于网络如有侵权请私信删除