Spring学习笔记1——配置文件开发到纯注解开发——黑马程序员

 学习记录笔记~


为什么bean默认为单例?

适合交给容器管理的bean:表现层对象、业务层对象、数据层对象、工具对象

不适合交给容器管理的bean:封装实体的域对象

实例化bean的四种方式

<!-- 1.构造方法实现bean-->
    <bean id="bookDaoImpl" name="daoimpl" class="com.smart.dao.impl.BookDaoimpl" scope="prototype"/>
    <bean id="bookServiceImpl" name="service" class="com.smart.service.impl.BookServiceImpl" scope="prototype">
        <property name="bookDao" ref="daoimpl"/>
    </bean>
<!--2.使用静态工厂实例化bean-->
    <bean id="orderDao" class="com.smart.factory.OrderDaoFactory" factory-method="getOrderDao"/>
<!--3.使用实例化工厂实例化bean-->
    <bean id="userFactory" class="com.smart.factory.UserDaoFactory"/>
    <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
<!--4.使用FactoryBean实例化bean-->
    <bean id="userDao" class="com.smart.factory.UserDaoFactoryBean"/>

bean的生命周期:bean从创建到销毁的整体过程。

bean生命周期控制:在bean创建后到销毁前做一些事情。

生命周期的控制:1.配置格式控制(init-method,destory-method)

                              2.实现InitializingBean,DisposableBean接口控制生命周期

关闭容器:


 依赖注入

向一个类中传递数据的方式有普通方法(set)和构造方法两种

依赖注入的方式

        setter注入:简单类型,引用类型

        构造器注入:简单类型,引用类型

简单类型的注入:第一步写明set方法,第二部在配置文件中使用property标签中的value属性对其进行赋值,这里的name是成员变量的名字

 <bean id="bookService" class="com.smart.service.impl.BookServiceImpl">
<!--        name是该类中包含的私有成员变量名,ref中是已被定义的bean-->
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>

构造器注入:第一步写有参的构造方法,第二步在配置文件中使用constructor-arg标签对其进行配置,但需要注意的是这里name的值是参数的名字不是成员变量的名字

<bean id="bookService" class="com.example.demospring_2.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>

耦合度过高 

<constructor-arg type="java.lang.String" value="sql"/>
<constructor-arg type="int" value="999"/>

降低耦合度的两种选择:

将写死的参数名变为参数类型可降低耦合度
<constructor-arg name="databaseName" value="sql"/>
<constructor-arg name="connectionNum" value="999"/>

解决参数类型重复 

<constructor-arg index="0" value="sql"/>
<constructor-arg index="1" value="999"/>

依赖自动装配

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

byName是按名称自动装配byByte是按类型自动装配 

<bean id="bookService" class="com.example.demospring_2.service.impl.BookServiceImpl" autowire="byName">


注解开发与纯注解开发

配置文件的管理虽然能够提高new对象的性能,但开发效率不高,所以Spring后来改为使用注解开发,从部分注解到纯注解开发,可以极大的提高开发的速度,现在的大部分SpringBoot项目均使用纯注解开发方式,也就是说前面的配置文件基本上用不到了,但并没白学哦,前面的铺垫可以更好的理解注解的原理。

//加载配置文件初始化容器————配置文件开发
ApplicationContext ctx=new AnnotationConfigApplicationContext(SpringConfig.class);



单独建立一个SpringConfig类————纯注解开发
@Configuration        //设定当前类为配置类
@ComponentScan({"com.example.demospring_3"})        // 代替原先配置文件中的这行代码<context:component-scan base-package="com.example.demospring_3.dao.impl"/>

public class SpringConfig {

}

//加载配置文件初始化容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationcontext.xml.bak");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值