Spring框架

为了解耦合:让类与类、模块与模块之间关系更松散
spring适合管理哪些对象:service对象、dao对象、工具类对象
spring不适合管理哪些对象:实体类、(servlet、listener、filter等web对象也不适合,因为这些对象是给tomcat创建和管理的)

spring又叫容器,是装Java对象。可以控制spring创建Java对象、给属性赋值

可以当作容器的对象---tomcat服务器----管理servlet、listener、filter对象

手动下载对应的spring版本:https://repo.spring.io/                       //实际项目使用Maven自己会处理的
 

docs:文档
libs:源代码(spring是开源的)  //spring比较大,分成20多个独立的模块,为了方便使用每模块做成单独的jar包
        .jar                     字节码打包
        javadoc.jar        文档打包
        sources.jar        Java源代码打包
schena: spring框架使用的约束文件
        

Core Container:核心容器,包含4个模块

IOC:控制反转

是一个理论思想:把对象的创建、属性赋值、对象的生命周期都交给代码以外的容器管理
        控制:对象创建、属性赋值、对象的生命周期
        反转:开发人员管理对象的权限转移给代码之外的容器实现。由容器完成对象的管理         
        正转:开发人员 new 构造方法创建对象。由开发人掌握对象的创建、属性赋值、对象的生命周期。

开发人员通过容器可以使用容器中的对象

技术实现:DI (依赖注入)-----程序只需要提供使用对象的名字,对象如何创建、如何从容器中查找、获取都由容器内部自己实现
                                依赖:A类用了B类的内容    (执行A类的功能,需要先创建B类的对象)
                                注入:赋值                           (B类对象作为A类的属性)

Spring框架使用DI来实现IoC思想,通过名字获取容器中对应的对象(spring底层使用反射机制创建对象、给属性赋值)

IoC通过管理对象解耦合。解决处理业务逻辑对象之间的耦合关系,也就是service对象和dao对象

使用:     1.使用maven创建普通的Java项目后,修改pom.xml文件加入spring依赖Spring-context       //依赖代码去Maven官网找
                2.开发人员写自己的业务代码(类)
                3.创建spring配置文件xml(声明对象:一个<bean>表示一个Java对象)把对象交给spring创建和管理
                4.创建spring容器对象ApplicationContext接口//代表配置文件,从容器对象中根据名称获取对象getBean("id值")

 

spring配置文件一般会起名beans.xml 或applicationContext.xml 

<?xml version="1.0" encoding="UTF-8"?>
<!--beans根标签
    跟标签后面的属性是约束文件的说明
    xmls                  声明命名空间
    xmlns:xsi             命名xsi空间
    xsi:schemaLocation    xsi空间里有个标签schemaLocation  
    http://www.springframework.org/schema/beans     约束文件的具体路径
    http://www.springframework.org/schema/beans/spring-beans.xsd   互联网上的约束文件的地址
 -->
<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">


    <!--声明对象
            bean标签:spring管理的java对象
                id:自定义的对象名
                class:全类名,通过反射创建对象用的
            spring根据id、class创建对象,把对象放到spring的map对象中  //map.put(id,对象)
    -->        
    <bean id="对象名" class="全类名">    

    
</beans>

        /*1.指定spring的配置文件路径,从类路径classes下,因为代码编译后放在target/classes之下,而resources的文件也是放在这*/
        String config = "beans.xml";
        /*2.创建容器对象: ApplicationContext接口。 ClassPathXmlApplicationContext实现类,从类路径中读取配置文件*/
            //在这步时调用无参构造创建对象。即创建容器对象时读取配置文件,创建文件中的所有的声明对象<bean>,然后放到容器的map中
            //好处是以后用的时候因为容器中已经有对象了,所以获取速度快。缺点是可能浪费性能
        ApplicationContext ctx = new ClassPathXmlApplicationContext(config);       
        /*3.从容器中获取指定名称的对象(bead中的id值),类型为Object,需要转回自己的类型*/
        SomeService service = (SomeService) ctx.getBean("id值");
        /*4.调用接口类型对象的方法*/
        service.doSome();



        int count = ctx.getBeanDefinitionCount();    //获取对象的数量
        String[] names = ctx.getBeanDefinitionNames(); //获取对象的名字字符串数组

        DI:给属性赋值

方式

  • 基于配置文件
  • 基于注解    

 DI分类:

  • set注入  //设值注入         spring调用无参构造方法创建对象。调用类的set方法,在set方法中完成属性赋值        //必须有set方法,本质来讲执行的是set属性名(),与属性名无关
  • 构造注入                         spring调用构造方法时完成属性赋值                                   

基于配置文件的ID: 

1.配置文件、set注入
    <bean id="" class="">
        <!--简单类型set注入 (简单类型:基本类型、String类型)-->
        <property name="属性名" value="属性值"/>                 //name值与set+属性名()方法相关,与属性无关
        <!--引用类型set注入-->
        <property name="属性名" ref="对象名,即对象的id值"/>
    </bean>


2.配置文件、构造注入
    <bean标>的<constructor-arg>:表示构造方法的1个参数
                  name:形参名
                  index:构造方法参数位置  0开始
                  value:简单类型实参
                  ref:引用类型实参
    <bean id="" class="">
        <constructor-arg name="形参名" value="简单类实参"/>         将value值赋给形参
        <constructor-arg name="形参名" ref="引用类型实参"/>
        <constructor-arg index="下标位置" value="简单类实参"/>
        <constructor-arg index="下标位置" ref="引用类型实参"/>
    </bean>


3.引用类型自动赋值:
        autowire属性:该对象的引用类型采取自动赋值
            值:byName、byType
    <bean id="" class="" autowire=""></bean>

    

引用类型的自动注入:<bean>带有属性autowire="byName或byType"

  • byName:Java类中引用类型属性名和spring容器的<bean>的id值相同、类型也相同。这样<bean>能赋值给属性               
  • byType:Java类中引用类型的数据类型和spring容器的<bean>是同源关系。这样<bean>能赋值给属性   //前提是<bean>对象只在该类型中有一个,不然类的属性就不知道赋值哪个了 
    • 同源关系: 属性的类型和<bean>的类型:相同、继承关系、接口实现

多个Spring配置文件:按功能模块分、按类的功能分

<?xml version="1.0" encoding="UTF-8"?>
<!--suppress ALL -->
<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">
    
    <!--其他配置文件-->
    <import resource="classpath:其他文件的类路径"/>
    <import resource="classpath:可以同通配符*表示一段文字"/>
</beans>

基于注解的ID

创建对象的注解 (234注解都是扩展自Component注解)
        @Component                          位置:类上                        创建Java对象,相当于<bean>        
        @Repository                         位置:dao接口的类上                创建dao接口的类的对象--dao对象(持久层对象),能访问数据库  
        @Service                            位置:放在业务层接口的实现类上      创建业务层对象,业务层对象有事务的功能
        @Controller                         位置:放在控制器接口的实现类上      创建控制器对象(表示层对象),控制器对象能接受请求、把请求的处理结果显示给用户

              属性:value        表示对象的名称,即id值 //可省
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值