Spring(一)-IOC

一、Spring定义

Spring是一个开源框架,为简化企业级开发应用而生,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能,它是一个IOC(DI)(依赖注入)和AOP(面向切面编程)容器框架。

  • 一站式:在IOC和AOP基础上可以整合各种企业应用的开源框架和第三方类库。

二、环境搭建

  • 1、新建工程
  • 2、导入五个必备jar包
    commons-logging-1.1.1.jar
    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具体应用

1、IOC&DI

Spring(一)-IOC_第1张图片
Paste_Image.png
  • IOC前生
    1) 分离接口与实现
Spring(一)-IOC_第2张图片
Paste_Image.png

2)工厂设计模式

Spring(一)-IOC_第3张图片
Paste_Image.png

3)反转控制

Spring(一)-IOC_第4张图片
Paste_Image.png

2、IOC中Bean的配置

  • 1、基于xml文件
    创建HelloWorld类,包含一个name对象和一个hello()方法。
    创建SpringBean配置文件,命名为applicationContext.xnl,并配置内容。


      

//创建Spring的IOC容器对象
//ApplicationContext 代表IOC容器
//ClassPathXmlApplicationContext:ApplicationContext 接口的实现类,该实现类从类路径下加载配置文件
ApplicationContext ctx=new ClassPathXmlApplicationContext("appllicationContext.xml");
//从IOC容器中获取Bean实例
//利用id定位IOC容器中的bean,还可以同类型HelloWorld.class来获得,此时IOC容器中bean必须只有一个
HelloWorld helloWorld=(HelloWorld)ctx.getBean("helloWorld");
//调用类中方法
helloWorld.hello();
Spring(一)-IOC_第5张图片
Paste_Image.png
Spring(一)-IOC_第6张图片
Paste_Image.png
  • 2、配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法&实例工厂方法)、FactoryBean

  • 3、IOC的依赖注入
    1)属性注入


      

2)构造器注入


      
      

当存在重载构造器时,可以再constructor-arg中添加位置(index)或者类型(type)来进行区分
外部bean的引入:


      
      
      

Spring(一)-IOC_第7张图片
Paste_Image.png

Spring(一)-IOC_第8张图片
Paste_Image.png

3)工厂方法注入(很少使用,不推荐)
注意:

  • a、内部bean不能被外部引用,只能在内部使用。
  • b、级联属性:bean支持为级联属性赋值,但必须初始化后才能进行赋值。和struts2不同
  • c、集合属性:

      
      
      
             
                  
                  
                   
            
      

Spring(一)-IOC_第9张图片
Paste_Image.png

Spring(一)-IOC_第10张图片
Paste_Image.png


              
                       root
                       123456
                       jdbc:mysql:///test 
                       com.mysql.jdbc.Driver
             
      

配置独立的集合bean,当多个bean都需要用到这个集合时,可以直接进行引用,需要导入util命名空间:


     
     

  • 通过p命名空间未bean赋值,需要先导入p命名空间

  • 4、自动装配
Spring(一)-IOC_第11张图片
Paste_Image.png




  • 5、自动装配的缺点
Spring(一)-IOC_第12张图片
Paste_Image.png
  • 6、bean的继承


Spring(一)-IOC_第13张图片
Paste_Image.png

当某一个bean没有指定的class属性时,他必须是一个抽象bean,否则会报错。

  • 7、bean的作用域


      
      

  • 8、bean外部属性文件
    原因:在配置文件里 配置bean时,有时需要在bean的配置里混入系统部署的细节信息(例如:文件路径,数据源配置信息等)。而这些部署细节实际上需要和bean的配置分离。
    已导入数据源为例:
    首先导入c3p0-0.9.1.2.jar包和mysql驱动包
    新建一个文件db.properties,写入要进行导入的属性
user=root
password=123456
jdbcUrl=jdbc:mysql:///test
driverClass=com.mysql.jdbc.Driver



              
                       
                       
                        
                       
             
      

  • 9、Spring表达式语言SpEL:
Spring(一)-IOC_第14张图片
Paste_Image.png
Spring(一)-IOC_第15张图片
Paste_Image.png
Spring(一)-IOC_第16张图片
Paste_Image.png
Spring(一)-IOC_第17张图片
Paste_Image.png
Spring(一)-IOC_第18张图片
Paste_Image.png
Spring(一)-IOC_第19张图片
Paste_Image.png

      
      
      
      
      
      
      
      
      
       
  
Spring(一)-IOC_第20张图片
Paste_Image.png
Spring(一)-IOC_第21张图片
Paste_Image.png
public class Car(){
      public Car(){
            System.out.println("Car Constructor.....");
      }
      private String brand;
      public void setBrand(){
            System.out.println("serBrand...");
            this.brand=brand;
      }
      public void init(){
            System.out,println("init...");
      }
      public xoid destory(){
            System.out.println("destory...");
      }
}

      



你可能感兴趣的:(Spring(一)-IOC)