spring-01

文章目录

  • 一、spring概述
  • 二、spring的模块介绍
  • 3、IOC的依赖注入
    • 3.1IOC
    • 3.2 DI
  • 三、springHolleWorld
    • 3.1 通过id获取对象
    • 3.2 通过类型获取对象
    • 3.3 通过构造方法参数名注入值
    • 3.4 IOC之 P名称空间
    • 3.5 测试null值的使用
    • 3.6 IOC之子对象的赋值测试
    • 3.7 IOC之内部Bean的使用
    • 3.8 IOC之List属性的赋值
    • 3.9 IOC之Map属性的赋值
    • 3.10 IOC之Properties属性的赋值
    • 3.11 IOC之util 名称空间
    • 3.12 IOC之级联属性赋值
    • 3.13 IOC之静态工厂方法/工厂实例方法创建创建Bean
    • 3.14 IOC之FactoryBean接口方式创建对象
    • 3.15 IOC之继承Bean配置及抽象Bean
    • 3.16 spring容器内的Bean默认创建顺序
    • 3.17 IOC之Bean的单例和多例
    • 3.18 基于xml配置文件的自动注入
  • 四、Bean的生命周期
    • 1. IOC之Bean的生命周期
    • 2.Bean对象的后置处理器
  • 五、Spring管理数据库连接池(重点)
    • 1.连接数据库
    • 2.Spring引入单独的jdbc.properties配置文件(重点)
    • 3.使用context名称空间加载jdbc.properties配置文件(重点)
  • 一、spring概述
  • 二、spring的模块介绍
  • 3、IOC的依赖注入
    • 3.1IOC
    • 3.2 DI
  • 三、springHolleWorld
    • 3.1 通过id获取对象
    • 3.2 通过类型获取对象
    • 3.3 通过构造方法参数名注入值
    • 3.4 IOC之 P名称空间
    • 3.5 测试null值的使用
    • 3.6 IOC之子对象的赋值测试
    • 3.7 IOC之内部Bean的使用
    • 3.8 IOC之List属性的赋值
    • 3.9 IOC之Map属性的赋值
    • 3.10 IOC之Properties属性的赋值
    • 3.11 IOC之util 名称空间
    • 3.12 IOC之级联属性赋值
    • 3.13 IOC之静态工厂方法/工厂实例方法创建创建Bean
    • 3.14 IOC之FactoryBean接口方式创建对象
    • 3.15 IOC之继承Bean配置及抽象Bean
    • 3.16 spring容器内的Bean默认创建顺序
    • 3.17 IOC之Bean的单例和多例
    • 3.18 基于xml配置文件的自动注入
  • 四、Bean的生命周期
    • 1. IOC之Bean的生命周期
    • 2.Bean对象的后置处理器
  • 五、Spring管理数据库连接池(重点)
    • 1.连接数据库
    • 2.Spring引入单独的jdbc.properties配置文件(重点)
    • 3.使用context名称空间加载jdbc.properties配置文件(重点)


一、spring概述

①spring是一个开源框架
②Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。
③Spring是一个IOC(DI)和AOP容器框架。
④Spring的优良特性
[1]非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
[2]控制反转:IOC——Inversion of Control,指的是将对象的创建权交给Spring去创建。使用Spring之前,对象的创建都是由我们自己在代码中new创建。而使用Spring之后。对象的创建都是由给了Spring框架。
[3]依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值。
[4]面向切面编程:Aspect Oriented Programming——AOP
[5]容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
[6]组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
[7]一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)

二、spring的模块介绍

Spring框架分为四大模块:
Core核心模块。负责管理组件的Bean对象
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar

面向切面编程
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar

数据库操作
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-oxm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-jms-4.0.0.RELEASE.jar

Web模块
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
spring-websocket-4.0.0.RELEASE.jar
spring-webmvc-portlet-4.0.0.RELEASE.jar
spring-01_第1张图片

3、IOC的依赖注入

3.1IOC

IOC 全称指的是 Inverse Of Control 控制反转。

在使用Spring之前,对象的创建是由我们自己在代码中去new而产生。

而使用了spring之后。对象的创建完全交由Spring容器来进行。

注意:如果是你自己new的对象,就不会自动Spring的功能。

3.2 DI

DI 指的是Dependency Injection 。是依赖注入的意思。

依赖,是指,一个对象需要完成某个功能,然后必须依靠另一个对象。叫依赖。

简单点说,就是需要。就是依赖。

比如:

public class BookService {

private BookDao bookDao; // BookService依赖BookDao

}

注入,就是给对象赋值。

依赖注入,就是指给依赖的对象赋值操作。叫依赖注入。

在使用Spring框架之前,依赖对象的赋值都是由我们通过构造器方法,或者setXxx方法来进行设置。

在使用Spring框架之后,只需要通过xml配置,或者是注解配置就可以对依赖的对象进行方法,即可的方便后面的维护和扩展

三、springHolleWorld

1.导入jar包
junit_4.12.jar
org.hamcrest.core_1.3.0.jar
spring-beans-5.2.5.RELEASE.jar
spring-context-5.2.5.RELEASE.jar
spring-core-5.2.5.RELEASE.jar
spring-expression-5.2.5.RELEASE.jar
spring-jcl-5.2.5.RELEASE.jar

2.创建javaBean类

public class Person {
    private Integer id;
    private String name;
    private String sex;
    private Phone phone;
    private List list;
    private Map map;

3.在src目录下创建springconfig文件-applictionCotext.xml








3.1 通过id获取对象

4.在applictionContext.xml中配置

  
    
        
        
        
    

test测试类

@Test
    public void Test() {
        /*
          如何使用Spring,首先要先有一个Spring的容器对象
          在Spring中容器对象由接口 ApplicationContext 表示。
          ClassPathXmlApplicationContext表示从classpath类路径下加载xml配置文件,
          生成ApplicationContext容器对象
         */

        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
        Person p1 = (Person) applicationContext.getBean("p1");
        System.out.println(p1);
    }

3.2 通过类型获取对象

    @Test
    public void Test1() {
        /*
        容易引起的异常,多个同类型
        NoUniqueBeanDefinitionException:
            No qualifying bean of type 'com.atguigu.pojo.Person'
            available: expected single matching bean but found 2: p1,p2
         */
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
        Person bean = applicationContext.getBean(Person.class);
        System.out.println(bean);
    }

3.3 通过构造方法参数名注入值

 
    
    
        
        
        
        
        
        
    
    
    
        
        
        
        
        
        
    

    
    
        
        
        
        
        
        
    

3.4 IOC之 P名称空间

引用p标签
xmlns:p=“http://www.springframework.org/schema/p”


3.5 测试null值的使用

    

3.6 IOC之子对象的赋值测试

子对象JavaBean

public class Phone {
    private String brand;
    private Double money;

applictionContext.xml


    
    
  

3.7 IOC之内部Bean的使用

  

    
        
        
            
                
                
            
        
    
    
    
    
        
            
                朱茵
                王祖贤
                宋美龄
                奥戴尔·赫本
            
        
    
    

3.9 IOC之Map属性的赋值

 
    
    
        
            
                
                
                
            
        
    

3.10 IOC之Properties属性的赋值

 

    
        
            
                jdbc:mysql:///test
                root
                123456
            
        
    
    
    

3.11 IOC之util 名称空间


    
        迪丽热巴
        赵丽颖
        古力娜扎
    
    
        
    

3.12 IOC之级联属性赋值

 
    
    
    
        
        
        
        
    

3.13 IOC之静态工厂方法/工厂实例方法创建创建Bean

public class PersonFactory {
    public static Person getStaticPerson(){
        return new Person(14, "静态工厂方法创建Person", null,null,null,null);
    }
    public Person getPerson(){
        return new Person(14, "实例工厂方法创建Person", null,null,null,null);
    }
}

applictionContext.xml

 

3.14 IOC之FactoryBean接口方式创建对象

public class FactoryBeanImpl implements FactoryBean {
    @Override
    public Person getObject() throws Exception {

        return new Person(15, "通过继承FactoryBean接口方式创建的对象", null,null,null,null);
    }

    @Override
    public Class getObjectType() {
        return Person.class;
    }
}

applictionContext.xml


    

3.15 IOC之继承Bean配置及抽象Bean

 
    
    

    
        
        
        
            
                
                
            
        
    
    
    
        

        
            
                
                
            
        
    
    

3.16 spring容器内的Bean默认创建顺序

  
    
    
    
    
    

3.17 IOC之Bean的单例和多例


    
        
        
        
    

3.18 基于xml配置文件的自动注入



    
    


    
    



    

四、Bean的生命周期

1. IOC之Bean的生命周期

创建一个类Life

public void init(){
    System.out.println(" 对象初始化了 ");
}

public void destory(){
    System.out.println(" 对象销毁了 ");
}

appliction.xml


    

默认情况下。Spring配置文件中的对象会随着Spring容器的创建而一起创建.
关闭Spring 容器的时候,才会销毁Bean对象(对多例无效)

2.Bean对象的后置处理器

创建类继承BeanPostProcessor接口

package com.atguigu.beanpostprocessor;

import com.atguigu.pojo.Customer;
import com.atguigu.pojo.Phone;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * @author ikkkc_
 * @Data 2020-12-29 周二
 * @Description
 */
public class MyBeanPostProcessor implements BeanPostProcessor {
//    bean的后置处理器

    //初始化前
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

        System.out.println("==postProcessBeforeInitialization==");
        System.out.println("正在初始化的对象" + bean);
        System.out.println("正在初始化的对象的名称" + beanName);
        System.out.println("==postProcessBeforeInitialization==");
        return bean;
    }

    //初始化后
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("=======postProcessAfterInitialization========");
        if (bean instanceof Customer) {
            Customer beanT = (Customer) bean;
            beanT.setPhone(new Phone("爱疯888", 3999.9));
        }
        return bean;
    }
}

applictionContext.xml




    
        
    

五、Spring管理数据库连接池(重点)

导入需要的jar包:
druid-1.1.9.jar
mysql-connector-java-5.1.37-bin.jar

1.连接数据库


    
        
        
        
        
        
        
    

测试

 @Test
    public void Test23() throws SQLException {
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applictionContext.xml");
        DruidDataSource datasource1 = (DruidDataSource) applicationContext.getBean("datasource1");
        System.out.println(datasource1);
        System.out.println(datasource1.getConnection());
    }

2.Spring引入单独的jdbc.properties配置文件(重点)

jdbc.properties

url=jdbc:mysql:///mybatis
driverClassName=com.mysql.jdbc.Driver
#spring的username用的时登录名的name 请用别的值代替
user=root
password=123456
maxActive=10
initialSize=5

applictionContext.xml


    

        
    

    
        
        
        
        
        
        
    

3.使用context名称空间加载jdbc.properties配置文件(重点)


    
        
            
            
            
            
            
            
        

一、spring概述

①spring是一个开源框架
②Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。
③Spring是一个IOC(DI)和AOP容器框架。
④Spring的优良特性
[1]非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
[2]控制反转:IOC——Inversion of Control,指的是将对象的创建权交给Spring去创建。使用Spring之前,对象的创建都是由我们自己在代码中new创建。而使用Spring之后。对象的创建都是由给了Spring框架。
[3]依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值。
[4]面向切面编程:Aspect Oriented Programming——AOP
[5]容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
[6]组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
[7]一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)

二、spring的模块介绍

Spring框架分为四大模块:
Core核心模块。负责管理组件的Bean对象
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar

面向切面编程
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar

数据库操作
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-oxm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-jms-4.0.0.RELEASE.jar

Web模块
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
spring-websocket-4.0.0.RELEASE.jar
spring-webmvc-portlet-4.0.0.RELEASE.jar
spring-01_第2张图片

3、IOC的依赖注入

3.1IOC

IOC 全称指的是 Inverse Of Control 控制反转。

在使用Spring之前,对象的创建是由我们自己在代码中去new而产生。

而使用了spring之后。对象的创建完全交由Spring容器来进行。

注意:如果是你自己new的对象,就不会自动Spring的功能。

3.2 DI

DI 指的是Dependency Injection 。是依赖注入的意思。

依赖,是指,一个对象需要完成某个功能,然后必须依靠另一个对象。叫依赖。

简单点说,就是需要。就是依赖。

比如:

public class BookService {

private BookDao bookDao; // BookService依赖BookDao

}

注入,就是给对象赋值。

依赖注入,就是指给依赖的对象赋值操作。叫依赖注入。

在使用Spring框架之前,依赖对象的赋值都是由我们通过构造器方法,或者setXxx方法来进行设置。

在使用Spring框架之后,只需要通过xml配置,或者是注解配置就可以对依赖的对象进行方法,即可的方便后面的维护和扩展

三、springHolleWorld

1.导入jar包
junit_4.12.jar
org.hamcrest.core_1.3.0.jar
spring-beans-5.2.5.RELEASE.jar
spring-context-5.2.5.RELEASE.jar
spring-core-5.2.5.RELEASE.jar
spring-expression-5.2.5.RELEASE.jar
spring-jcl-5.2.5.RELEASE.jar

2.创建javaBean类

public class Person {
    private Integer id;
    private String name;
    private String sex;
    private Phone phone;
    private List list;
    private Map map;

3.在src目录下创建springconfig文件-applictionCotext.xml








3.1 通过id获取对象

4.在applictionContext.xml中配置

  
    
        
        
        
    

test测试类

@Test
    public void Test() {
        /*
          如何使用Spring,首先要先有一个Spring的容器对象
          在Spring中容器对象由接口 ApplicationContext 表示。
          ClassPathXmlApplicationContext表示从classpath类路径下加载xml配置文件,
          生成ApplicationContext容器对象
         */

        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
        Person p1 = (Person) applicationContext.getBean("p1");
        System.out.println(p1);
    }

3.2 通过类型获取对象

    @Test
    public void Test1() {
        /*
        容易引起的异常,多个同类型
        NoUniqueBeanDefinitionException:
            No qualifying bean of type 'com.atguigu.pojo.Person'
            available: expected single matching bean but found 2: p1,p2
         */
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
        Person bean = applicationContext.getBean(Person.class);
        System.out.println(bean);
    }

3.3 通过构造方法参数名注入值

 
    
    
        
        
        
        
        
        
    
    
    
        
        
        
        
        
        
    

    
    
        
        
        
        
        
        
    

3.4 IOC之 P名称空间

引用p标签
xmlns:p=“http://www.springframework.org/schema/p”


3.5 测试null值的使用

    

3.6 IOC之子对象的赋值测试

子对象JavaBean

public class Phone {
    private String brand;
    private Double money;

applictionContext.xml


    
    
  

3.7 IOC之内部Bean的使用

  

    
        
        
            
                
                
            
        
    
    
    
    
        
            
                朱茵
                王祖贤
                宋美龄
                奥戴尔·赫本
            
        
    
    

3.9 IOC之Map属性的赋值

 
    
    
        
            
                
                
                
            
        
    

3.10 IOC之Properties属性的赋值

 

    
        
            
                jdbc:mysql:///test
                root
                123456
            
        
    
    
    

3.11 IOC之util 名称空间


    
        迪丽热巴
        赵丽颖
        古力娜扎
    
    
        
    

3.12 IOC之级联属性赋值

 
    
    
    
        
        
        
        
    

3.13 IOC之静态工厂方法/工厂实例方法创建创建Bean

public class PersonFactory {
    public static Person getStaticPerson(){
        return new Person(14, "静态工厂方法创建Person", null,null,null,null);
    }
    public Person getPerson(){
        return new Person(14, "实例工厂方法创建Person", null,null,null,null);
    }
}

applictionContext.xml

 

3.14 IOC之FactoryBean接口方式创建对象

public class FactoryBeanImpl implements FactoryBean {
    @Override
    public Person getObject() throws Exception {

        return new Person(15, "通过继承FactoryBean接口方式创建的对象", null,null,null,null);
    }

    @Override
    public Class getObjectType() {
        return Person.class;
    }
}

applictionContext.xml


    

3.15 IOC之继承Bean配置及抽象Bean

 
    
    

    
        
        
        
            
                
                
            
        
    
    
    
        

        
            
                
                
            
        
    
    

3.16 spring容器内的Bean默认创建顺序

  
    
    
    
    
    

3.17 IOC之Bean的单例和多例


    
        
        
        
    

3.18 基于xml配置文件的自动注入



    
    


    
    



    

四、Bean的生命周期

1. IOC之Bean的生命周期

创建一个类Life

public void init(){
    System.out.println(" 对象初始化了 ");
}

public void destory(){
    System.out.println(" 对象销毁了 ");
}

appliction.xml


    

默认情况下。Spring配置文件中的对象会随着Spring容器的创建而一起创建.
关闭Spring 容器的时候,才会销毁Bean对象(对多例无效)

2.Bean对象的后置处理器

创建类继承BeanPostProcessor接口

package com.atguigu.beanpostprocessor;

import com.atguigu.pojo.Customer;
import com.atguigu.pojo.Phone;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * @author ikkkc_
 * @Data 2020-12-29 周二
 * @Description
 */
public class MyBeanPostProcessor implements BeanPostProcessor {
//    bean的后置处理器

    //初始化前
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

        System.out.println("==postProcessBeforeInitialization==");
        System.out.println("正在初始化的对象" + bean);
        System.out.println("正在初始化的对象的名称" + beanName);
        System.out.println("==postProcessBeforeInitialization==");
        return bean;
    }

    //初始化后
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("=======postProcessAfterInitialization========");
        if (bean instanceof Customer) {
            Customer beanT = (Customer) bean;
            beanT.setPhone(new Phone("爱疯888", 3999.9));
        }
        return bean;
    }
}

applictionContext.xml




    
        
    

五、Spring管理数据库连接池(重点)

导入需要的jar包:
druid-1.1.9.jar
mysql-connector-java-5.1.37-bin.jar

1.连接数据库


    
        
        
        
        
        
        
    

测试

 @Test
    public void Test23() throws SQLException {
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applictionContext.xml");
        DruidDataSource datasource1 = (DruidDataSource) applicationContext.getBean("datasource1");
        System.out.println(datasource1);
        System.out.println(datasource1.getConnection());
    }

2.Spring引入单独的jdbc.properties配置文件(重点)

jdbc.properties

url=jdbc:mysql:///mybatis
driverClassName=com.mysql.jdbc.Driver
#spring的username用的时登录名的name 请用别的值代替
user=root
password=123456
maxActive=10
initialSize=5

applictionContext.xml


    

        
    

    
        
        
        
        
        
        
    

3.使用context名称空间加载jdbc.properties配置文件(重点)


    
        
            
            
            
            
            
            
        

你可能感兴趣的:(spring)