spring学习(三)——配置文件——基础配置和循环依赖配置

一、Spring

1.1、spring是什么

  • Spring是分层的轻量级框架,以IOC(控制反转)和AOP()为内核,提供了展现层SpringMVC和持久层SpringJDBCTemlate以及业务层事务管理等众多技术,还能整合众多的第三方框架和类库。

spring 的优势

  • 方便解耦,简化开发:通过提供IOC容器,可以将对象的依赖关系交由Spring进行控制。之前是在一个类里面创建对象,是写死的,而现在只是交由IOC去创建,我需要的时候只需要去找IOC去要就行。
  • AOP编程的支持:通过进行切面编程,许多不容易用传统OOP实现的功能可以通过AOP轻松实现。
  • 声明事务的支持:通过声明式方式可以灵活的进行事务管理,提高开发效率。
  • 方便集成各种优秀的框架
  • 降低JavaEE API的使用难度。

1.2、Spring快速入门

  • 第一步:导入坐标;
    在这里插入图片描述

  • 第二步:创建Bean;
    在这里插入图片描述

  • 第三步:创建applicationContext.xml文件;
    在这里插入图片描述

  • 在配置文档进行配置;
    在这里插入图片描述

  • 创建ApplicationContext对象并getBean;

在这里插入图片描述

1.3、配置文件讲解

1.3.1、Bean标签基本配置

用于配置对象由Spring来创建,默认情况下它调用的是类中的无参构造,如果没有无参构造则不能创建成功;

  • 基本属性:
    (1)id:Bean实例在Srping中的唯一标识,不能出现重复;
    (2)class:Bean的全包名;

1.3.2、Bean标签范围配置

  • scope标签:指对象的作用范围,取值如下:
    (1)singleton:默认值,单例的。当加载配置文件时(当应用加载时),就会创建该Bean对象,只要容器在,对象一直活着。当应用销毁或者容器销毁时,对象就被销毁了。
    (2)prototype:多例的。在每次getBean时创建一个该Bean对象,即就是使用时创建,只要对象在被使用中,就一直活着,长时间不用时,就会被java垃圾回收机制回收。
    (3)request:WEB项目中,Spring创建一个Bean对象,将对象存入到resquest域中;
    (4)session:WEB项目中,Spring创建一个Bean对象,将对象存入到session域中
  • scope标签的使用方式:
<bean id="userDao" class="com.zjh.dao.impl.UserDaoImpl" scope="prototype"></bean>
  • 注意事项
    在这里插入图片描述

1.3.3、Bean初始化和销毁方法的配置

  • init-methon:指定类中的初始化方法。也就是说在对象创建时执行的方法。
  • destory-method:指定类中销毁方法。也就是说在对象销毁时执行的方法。
  • 使用方式:
<bean id="userDao" class="com.zjh.dao.impl.UserDaoImpl" init-methpd="init" destory-method="detory"></bean>

1.3.4、Bean实例化三种方式

  • 无参构造方法实例化:常见的直接使用bean标签就是无参构造;
  • 工厂静态方法实例化:首先先创建一个工厂类,并在该类里面写一个静态方法去创建Bean对象。然后在xml文件中进行配置,再通过getBean获取就行。
//先写静态工厂
public class Factory {
	public static UserDao getUserDao() {
		return new UserDaoImpl();
	}
}

//配置xml文件
<bean id="userDao" class="com.zjh.dao.factory.Factory" factory-method="getUserDao"></bean>

//获取
UserDao userDao = (UserDao)getBean("userDao");
  • 工厂实例方法实例化

1.3.5、依赖注入

  • 依赖注入:他是Spring框架核心IOC的具体实现
  • Bean依赖注入的方式:
    (1)通过构造方法
1、首先该类的构造方法是有参数的。
2、在xml为文件里进行配置,如下所示;
	<bean id="constructorDepend" class="com.zjh.depend.impl.ConstructorDependImpl">
	        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
	</bean>
    注意:name的值和ref的值,name的值和构造方法参数名保持一致,ref和引用的bean的id保持一致。

(2)通过set方法

一、set注入的第一种配置方式
	1、首先该类里面的该成员必须要有set方法,
	通过xml文件的配置,从而进行注入。
	2、使用方式
	<bean id="depend" class="com.zjh.depend.impl.DependImpl">
	//注意这个name的值和ref的值是怎么来的。
	        <property name="userDao" ref="userDao"></property> 			     
	 </bean>        
二、set的第二种注入方式(P命名空间)
	1、首先,先在beans标签里面加入xmlns:p="http://www.springframework.org/schema/p"
	2、然后编写bean标签: <bean id="depend2" class="com.zjh.depend.impl.DependImpl" p:userDao-ref="userDao"></bean>

(3)集合类型参数的注入

1、首先在一个类要存在集合的属性。并且这些集合属性要有set方法。
2、进行配置;
	<bean id="gather" class="com.zjh.jihe.Gather">
<!--        对List进行注入-->
        <property name="list">
            <list>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </list>
        </property>
<!--        对Map进行注入-->
        <property name="map">
            <map >
                <entry key="a" value-ref="userDao2"></entry>
                <entry key="b" value-ref="userDao2"></entry>
                <entry key="c" value-ref="userDao2"></entry>
            </map>
        </property>
<!--        对Properties进行注入-->
        <property name="properties">
            <props>
                <prop key="p1">ppp</prop>
                <prop key="p2">hhh</prop>
                <prop key="p3">eee</prop>
            </props>
        </property>
    </bean>

(4)对普通属性通过set进行注入

1、首先编写一个带有普通属性的类,并且该属性要有set方法。
2、进行配置。如下所示,注意:后面用的是value,而不是ref。
	<bean id="userDao2" class="com.zjh.dao.impl.UserDaoImpl">
	        <property name="name"  value="zjh"></property>
	        <property name="age" value="10"></property>
	</bean>

1.3.6、 引入其他配置文件(分模块开发)

  • 实际开发中,Spring的配置内容非常多,这就导致Spring配置很复杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过impo标签进行加载;

  • 引用格式:

    <import resource="applicaytionContext-XXX.xml"/>
    

1.4、Spring注解开发

1.4.1 、注解开发的优点

  • Spring时是轻代码重配置的框架,配置比较繁琐重,影响开发速率,所以注解是一种趋势,注解代替xml文件,可以简化注解,提高开发效率。

1.4.2、注解开发的步骤

  • 第一步:先在applicationContext.xml文件里面添加组件扫描;
<context: component-scan base-package="基础包名"></context:component-scan>
  • 第二步:添加对应的注解

在这里插入图片描述

  • 参考idea代码:spring_anno
  • 个别注解的讲解
    (1)@Scope:创建单例或者单例对象;
    (2)@PostConstruct:对象初始化方法;
    (3)@PreDestory:对象销毁时执行的方法;
  • 注入区分
    (1)引用类型注入
当容器里只有一个UserDao类型的对象时,可以使用这个,也可以使用方式二。
但是当容器里有多个UserDao类型的对象时,必须使用方式二。
(1)注入方式1:根据类型进行注入
	@Autowired
    private UserDao userDao;
(2)注入方式2:根据id进行注入,但是必须@Autowired和@Qualifier一起使用
	@Autowired
    @Qualifier("userDao")
    private UserDao userDao;
(3)注入方式3:相当于是将@Autowired和@Qualifier结合起来。
	@Resource(name="userDao")//name后面的值是Bean对象的id。
	private UserDao userDao;

(2)基础类型注入

(1)方式1:直接将值zjh赋值给name。
	@Value("zjh")
	String name;
(2)方式2:将properties里面键为name的值赋值给name;
(注意:必须要将properties文件先导入到xml文件里)
	@Value("${name}")
	String name;

IOC的解释

AOP的解释

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值