Spring

spring 概述

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,

IOC 控制反转

IOC 中 bean 标签和管理对象细节 

<!--把对象的创建交给spring来管理-->
<!--spring对bean的管理细节
1.创建bean的三种方式
2.bean对象的作用范围
3.bean对象的生命周期
-->

<!--创建Bean的三种方式 -->
<!-- 第一种方式:使用默认构造函数创建。
在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。
采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
-->

<!-- 第二种方式: 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
-->

<!-- 第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
<bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>
-->

<!-- bean的作用范围调整
bean标签的scope属性:
作用:用于指定bean的作用范围
取值: 常用的就是单例的和多例的
singleton:单例的(默认值)
prototype:多例的
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>
-->

<!-- bean对象的生命周期
单例对象
出生:当容器创建时对象出生
活着:只要容器还在,对象一直活着
死亡:容器销毁,对象消亡
总结:单例对象的生命周期和容器相同
多例对象
出生:当我们使用对象时spring框架为我们创建
活着:对象只要是在使用过程中就一直活着。
死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回收
-->

依赖注入的概念 

依赖注入:Dependency Injection。它是 spring 框架核心 ioc 的具体实现。 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。 ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。 那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。 简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。 

构造函数注入 

<!-- 使用构造函数的方式,给 service 中的属性传值 

要求:

   类中需要提供一个对应参数列表的构造函数。 

涉及的标签:

   constructor-arg   

属性:   

 index:指定参数在构造函数参数列表的索引位置   

 type:指定参数在构造函数中的数据类型 

name:指定参数在构造函数中的名称 用这个找给谁赋值
=======上面三个都是找给谁赋值,下面两个指的是赋什么值的==============
value:它能赋的值是基本数据类型和 String 类型

ref:它能赋的值是其他 bean 类型,

也就是说,必须得是在配置文件中配置过的 bean -->

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<constructor-arg name="name" value=" 张三 ">

</constructor-arg> <constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg> </bean>

<bean id="now" class="java.util.Date"></bean>

 set 方法注入 

<!-- 通过配置文件给 bean 中的属性传值:

使用 set 方法的方式 涉及的标签:

property 


属性:

name:找的是类中 set 方法后面的部分

ref:给属性赋值是其他 bean 类型的

value:给属性赋值是基本数据类型和 string 类型的 实际开发中,此种方式用的较多。 -->

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">

<property name="name" value="test"></property>
<property name="age" value="21"></property>

<property name="birthday" ref="now"></property>

</bean> <bean id="now" class="java.util.Date"></bean>


set 集合注入

<!-- 注入集合数据 List 结构的: array,list,set
Map 结构的 map,entry,props,prop
-->
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<!-- 在注入集合数据时,只要结构相同,标签可以互换 --> <!-- 给数组注入数据 --> <property name="myStrs">
<set>

<value>AAA</value>

<value>BBB</value>

<value>CCC</value>

</set>
</property>
<!-- 注入 list 集合数据 -->

<property name="myList">

<array>

<value>AAA</value>

<value>BBB</value>

<value>CCC</value>

</array>

</property>
<!-- 注入 set 集合数据 -->

<property name="mySet">
<list>

<value>AAA</value>

<value>BBB</value>

<value>CCC</value>

</list> </property>
<!-- 注入 Map 数据 -->

<property name="myMap">

<props>
<prop key="testA">aaa</prop>

<prop key="testB">bbb</prop>

</props>
</property>

原文地址:https://www.cnblogs.com/lee18/p/11343297.html