Spring笔记

IoC(Inversion of Control)控制反转:

        使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转

Spring技术对IoC思想进行了实现:

        Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的“外部” IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean

DI(Dependency Injection)依赖注入:

        在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

单例和非单例:

        bean默认为单例:

                scope=singleton(默认单例)\prototype(非单例)

                适合交给容器进行管理的bean:

                        表现层对象

                        业务层对象

                        数据层对象

                        工具对象

                不适合:

                        封装实体的域对象

实例化bean的三+一种方式:

        构造方法(无参构造):

                

public class BookDaoImpl implements BookDao {
    public BookDaoImpl() {

    }
    public void save() {

    }
}

<bean 
    id="bookDao" 
    class="dao.impl.BookDaoImpl“
    />

        静态工厂(基本不用):

public class BookDaoFactory{
    public static BookDao getOrderDao() {
        return new BookDaoImpl();
    }
}

<bean
    id="BookDao"
    factory-method="getBookDao"
    class="factory.BookDaoFactory"
    />

        原始实例工厂:

public class BookDaoFactory{
    public BookDao getOrderDao() {
        return new BookDaoImpl();
    }
}

<bean id="BookDaoFactory" class="factory.BookDaoFactory"/>
<bean
    id="BookDao"
    factory-method="getBookDao"
    factory-bean="BookDaoFactory"
    />

        FactoryBean:

public class BookDaoFactoryBean implements FactoryBean<BookDao>{
    public BookDao getOrderDao() throws Exception{
        return new BookDaoImpl();
    }
    public Class<?> getObjectType(){
        return BookDao.class;
    }
}

<bean 
    id="userDao" 
    class="factory.UserDaoFactoryBean"
    />

bean生命周期:bean从创建到消亡的完整过程
        初始化对象
                创建对象(分配内存)
                执行构造方法
                执行属性注入(set操作)
                执行bean初始化方法
        使用bean对象
                执行业务操作
        关闭/销毁容器
                执行bean销毁方法

依赖注入方式:

        setter注入:

                简单类型:

//在bean中定义类型属性并提供可访问的set方法
public class BookDaoImpl implements BookDao {
    private int connectionNumber;
    public void setConnectionNumber(int connectionNumber) {
        this.connectionNumber = connectionNumber;
    }
}

//配置中使用property标签value属性注入简单类型数据
<bean id="bookDao" class="dao.impl.BookDaoImpl">
    <property name="connectionNumber" value="10"/>
</bean>

                引用类型:

//在bean中定义引用类型属性并提供可访问的set方法
public class BookServiceImpl implements BookService{
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

//配置中使用property标签ref属性注入引用类型对象
<bean id="bookService" class="service.impl.BookServiceImpl">
    <property name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="dao.impl.BookDaoImpl"/>

        构造器注入:

                简单类型:

//在bean中定义引用类型属性并提供可访问的set方法
public class BookDaoImpl implements BookDao {
    private int connectionNumber;
    public BookDaoImpl(int connectionNumber){
        this.connectionNumber = connectionNumber;
    }
}

//配置中使用constructor-arg标签value属性注入简单类型数据
<bean id="bookDao" class="dao.impl.BookDaoImpl">
    <constructor-arg name="connectionNumber" value="10"/>
</bean>

                引用类型:

//在bean中定义引用类型属性并提供可访问的构造方法
public class BookServiceImpl implements BookService{
    private BookDao bookDao;
    public BookServiceImpl(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

//配置中使用constructor-arg标签ref属性注入引用类型对象
<bean id="bookService" class="service.impl.BookServiceImpl">
    <constructor-arg name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="dao.impl.BookDaoImpl"/>

                参数适配:

                        配置中使用constructor-arg标签type属性设置按形参类型注入

<bean id="bookDao" class="dao.impl.BookDaoImpl">
    <constructor-arg type="int" value="10"/>
    <constructor-arg type="java.lang.String" value="mysql"/>
</bean>

                        配置中使用constructor-arg标签index属性设置按形参位置注入

<bean id="bookDao" class="dao.impl.BookDaoImpl">
    <constructor-arg index="0" value="10"/>
    <constructor-arg index="1" value="mysql"/>
</bean>

依赖自动装配:IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中

        配置中使用bean标签autowire属性设置自动装配的类型

<bean id="bookDao" class="dao.impl.BookDaoImpl"/>
<bean id="bookService" class="service.impl.BookServiceImpl" autowire="byType"/>

        自动装配用于引用类型依赖注入,不能对简单类型进行操作

        使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用

        使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用

        自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

集合注入:

<property name="array">
    <array>
        <value>a</value>
        <value>b</value>
        <value>c</value>
    </array>
</property>
<property name="list">
    <list>
        <value>a</value>
        <value>b</value>
        <value>c</value>
    </list>
</property>
<property name="set">
    <set>
        <value>a</value>
        <value>b</value>
        <value>c</value>
    </set>
</property>
<property name="map">
    <map>
        <entry key="1" value="a"/>
        <entry key="2" value="b"/>
        <entry key="3" value="c"/>
    </map>
</property>
<property name="properties">
    <props>
        <prop key="1">a</prop>
        <prop key="2">b</prop>
        <prop key="3">c</prop>
    </props>
</property>

加载properties文件:

        开启context命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd">
</beans>

        使用context命名空间,加载指定properties文件:

<context:property-placeholder location="classpath:*.properties"/>

        使用${}读取加载的属性值:

<property name="username" value="${jdbc.username}"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值