Spring入门详细解读

xiaoxiao2025-03-12  9

 

IOC和DI

         ioc:inverse of control   控制反转

                     我们将创建对象的方式反转了

                     以前创建对象是我们自己开发人员维护,包括依赖关系也是自己注入.

                     使用spring之后,对象以及依赖关系是由spring创建和注入

                     反转控制就是反转了对象的创建方式,从我们自己的创建反转给了程序

    

       DI:Depenency  injection 依赖注入

                      实现IOC实现需要DI做支持

                      注入的方式:

                                 set和get方式注入

                                 构造注入

                                 字段注入

                     注入类型:

                                值注入(8大数据基本类型)

                                引用类型注入(将依赖对象注入)

 

 

spring创建对象的三种方式

                     1.空参构造创建(最常用的方式)

<!-- bean标签 class属性:被管理对象的完整类名 name属性:给被管理的对象起的名字,根据该名字获取对象 可以重复,可以使用特殊字符 id属性:和name属性一样 注意:尽量使用name属性 --> <bean name="user" class="cn.zzu.entity.User"></bean>

                      2.静态工厂创建(方法有static方法,直接调用方法)

public class UserFactory { public static User createUser() { System.out.println("静态工厂创建"); return new User(); } } <!-- 静态工厂创建 通过调用UserFactory类的createUser方法 --> <!-- name属性:创建的对象的名称,随便填写 class属性:类的路径 factory-method属性;调用的方法名 --> <bean name="user2" class="cn.zzu.factory.UserFactory" factory-method="createUser" scope="singleton"></bean>

                    3.实例工厂创建(创建对象的方法不带static,需要创建对象,然后对象调用方法)

//实例工厂创建对象 @Test public User createUser() { //不是静态方法 System.out.println("实例工厂"); return new User(); } <!-- 实例工厂创建对象 --> <!-- 1.先创建BeanUserFactory对象 --> <bean name="beanuserfactory" class="cn.zzu.Factory.BeanUserFactory"> </bean> <!-- 2.根据创建的对象调用方法 --> <bean name="user3" factory-bean="beanuserfactory" factory-method="createUser"></bean>

bean标签的其他属性

            scope属性: 

                                singleton,单例对象,被表示为丹丽的对象只会在spring中创建一个

                                prototype,多例原型,被标记的对象,每回使用的时候才会创建对象,每次都是新的对象,注意,:在整合struts的时                                                    候,action必须为多例

                                request:在web程序中使用,每次http请求都会返回一个全新的对象

                                session:在web程序中,每次http请求都会返回一个全新的对象

                                 global session:在web程序中,全局的session,上下文只有一个session

         生命周期属性:

                              配置一个方法为初始化方法,spring会在对象创建之后,立即调用

                                    init-method

                            配置一个方法作为生命周期的销毁方法,spring在容器关闭销毁对象之前调用

                                   destroy=method

<bean name="user" class="com.sjtu.bean.User" scope="singleton" init-method="init" destroy-method="destroy"></bean> //并在User中实现此方法 public void init() { System.out.println("初始化"); } public void destroy() { System.out.println("销毁"); }

主配置文件引入其他的配置文件:

//在主配置文件中做如下配置 <import resource="com/sjtu/b_create/applicationContext.xml"/>

属性注入

         set方法注入(****)(前提是在实体类中提供set方法)

package cn.zzu.entity; public class Car { private String name; private String color; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Car() { super(); // TODO Auto-generated constructor stub } public Car(String name, String color) { super(); this.name = name; this.color = color; } } <bean name="user" class="cn.zzu.entity.User" > <!--值类型注入:为User对象中名为name的属性注入tom作为值--> <property name="name" value="tom"></property> <property name="id" value="18"></property> <!--引用类型注入:为car属性注入下方配置的car对象 car是user中一个对象--> <property name="car" ref="car"></property> </bean> <!--将car对象配置到容器中 --> <bean name="car" class="cn.zzu.entity.Car"> <property name="name" value="兰博基尼"></property> <property name="color" value="黄色"></property> </bean>

         有参构造方法注入前提(前提是实体类中得有有参构造函数)

<!-- 构造函数的注入 --> <bean name="user2" class="cn.zzu.entity.User"> <!-- name属性:构造函数参数名 index属性:构造函数索引 type属性:构造函数参数类型 注意:上面的属性不必要全部出现 --> <constructor-arg name="name" value="tom" index="0" type="java.lang.String"></constructor-arg> <constructor-arg name="id" value="1" index="1" type="java.lang.Integer"></constructor-arg> <constructor-arg name="car" ref="car"></constructor-arg> </bean> <bean name="car" class="cn.zzu.entity.Car"> <constructor-arg name="name" value="大众"></constructor-arg> <constructor-arg name="color" value="红色"></constructor-arg> </bean>

        p名称空间注入(了解,实际上是set注入)

           

<!-- p空间注入 走set注入 1.导入p空间名称 xmlns:p="http://www.springframework.org/schema/p" 2.使用p:完成属性注入 --> <bean name="user3" class="cn.zzu.entity.User" p:name="张三" p:id="12" p:car-ref="car"> </bean> <!-- car对象的创建 --> <bean name="car" class="cn.zzu.entity.Car"> <property name="name" value="奥迪"></property> <property name="color" value="黑色"></property> </bean>

     spel注入(了解)

<!-- spel注入:spring expression language spring表达式 --> <bean name="user4" class="User"> <property name="name" value="#{user.name}"></property> <property name="age" value="#{user.age}"></property> <property name="car" ref="car"></property> </bean>

复杂类型的注入:

             数组注入:

<!-- 向数组中注入值 --> <bean name="collection" class="cn.zzu.entity.Collection"> <property name="arr" > <array> <value>tom</value> <value>jack</value> </array> </property> </bean>

              list注入:

<!-- 向list中注入值 --> <property name="list"> <list> <value>tom</value> <value>jack</value> </list> </property>

              map注入:

<!-- 向map中注入值 --> <property name="map"> <map> <entry key="1" value="zhangsan"></entry> <entry key="2" value="lisi"></entry> </map> </property>

              prop注入:

<!-- 向prop中注入值 --> <property name="prop"> <props> <prop key="1">张三</prop> <prop key="2">李四</prop> <prop key="3">王五</prop> </props> </property> <bean name="collection" class="cn.zzu.entity.Collection"> <!-- 向数组中注入值 --> <property name="arr" > <array> <value>tom</value> <value>jack</value> </array> </property> <!-- 向list中注入值 --> <property name="list"> <list> <value>tom</value> <value>jack</value> </list> </property> <!-- 向map中注入值 --> <property name="map"> <map> <entry key="1" value="zhangsan"></entry> <entry key="2" value="lisi"></entry> </map> </property> <!-- 向prop中注入值 --> <property name="prop"> <props> <prop key="1">张三</prop> <prop key="2">李四</prop> <prop key="3">王五</prop> </props> </property> </bean>

 

转载请注明原文地址: https://www.6miu.com/read-5025724.html

最新回复(0)