1: 了解配置文件 === xml scheme(dtd) (配置和注册了文件的标准和基本信息,可以定义文件的签名的格式)
2: 了解bean的装载的过程和作用域和依赖关系的问题.
3: 基于注解配置
4: 总结ioc
1>引用sxd文件(xsd:定义spring标准的配置文件,目的是为了提示方便编程)
a. 默认命名空间,配置bean信息(默认存在)
xmlns="http://www.springframework.org/schema/beans"
b.使用xml的标准是W3 XMLSheme-instance(默认存在)
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
================== 下面为动态添加 ===================
c. 具体的名称(上方定义命名空间[xmlns:xxx=描述地址] 下方定义引用地址[xsi:schemaLocation=引用地址])
p:命名空间:
xmlns:p="http://www.springframework.org/schema/p"
作用:简化在xml配置bean的属性 在<bean>中使用p:属性名来配置
AOP:命名空间:
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation:http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
作用:简化AspectJ的AOP在xml中配置
util:命名空间:
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation:
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
context:命名空间:
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation:
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
作用:1.配置自动扫描bean注解类
mvc:命名空间:
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation:
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
2>基本Bean配置
[其实注解和配置文件为两种不同的形式,他们都在找类]
a.基本注入(给属性赋值)
1> 一般属性配置
<bean id="user" class="com.ioc.User(实体类地址)">
<property name="age" value="20"></property> <!-- 属性赋值 -->
<property name="username" value="name"></property><!-- 属性赋值 -->
<property name="password" value="123456"></property><!-- 属性赋值 -->
<property name="score" value="89.9f"></property><!-- 属性赋值 -->
</bean>
<!--对上面配置的简写 -->
<bean class="com.ioc.User" p:age="56" p:username="name" p:score="89.3" p:password="789779879"></bean>
<!--学生与老师绑定配置. 一个老师多个学生,学生多个属性-->
<!--有三个学生 简单 豆豆 jony 分别给属性赋值(姓名 年龄 班级 老师)-->
<bean id="jiandan" class="com.ioc.Student" p:name="jiandan" p:age="16" p:classNo="1" p:teacher-ref="teacher"></bean>
<bean id="doudou" class="com.ioc.Student" p:name="逗逗同学"p:age="15"p:classNo="2" p:teacher-ref="teacher"></bean>
<bean id="jony" class="com.ioc.Student" p:name="jony"p:age="17"p:classNo="3" p:teacher-ref="teacher">
</bean>
<!--有一个老师叫做 ddd并给他属性赋值-->
<bean id="teacher" class="com.ioc.Teacher" p:name="ddd" p:age="30" p:names="xiaoke,xiaozhang,xiaowang">
<!--集合对象list,添加keke老师学生对象 List<Student> student; -->
<property name="students">
<list> <ref bean="doudou"/><ref bean="jiandan"/> <ref bean="jony"/></list>
</property>
<!--List集合可以重复且有序. 学生成绩属性赋值 List<Float> scores; -->
<property name="scores">
<list><value>89.6</value><value>99.6</value> <value>109.6</value></list>
</property>
<!--set不允许重复 无序 . 生成绩属性赋值 List<Float> scores; -->
<property name="jobs">
<set><value>服务生</value><value>帮转工</value><value>程序员</value><value>厨师</value>
<value>厨师</value></set>
</property>
<!-- 数组 简写方式:p:names="宝宝,小明,小红" String[] arr; -->
<property name="names">
<array><value>宝宝</value><value>小明</value><value>小红</value></array>
</property>
<!--Map注入 HashMap<String, Integer> map -->
<property name="map">
<map>
<entry><key><value>username</value></key><value>keke</value></entry>
<entry><key><value>age</value></key><value>30</value></entry>
</map>
</property>
<!--配置邮箱 Properties emails; -->
<property name="emails">
<props><prop key="demomail">123@qq.com</prop>
<prop key="jonymail">123123@qq.com</prop>
<prop key="doudoumail">878979@qq.com</prop>
</props>
</property>
<!-- string 转化为date Date ctime; -->
<property name="ctime" >
<bean class="com.ioc.StringUtils" factory-method="parseDate">
<constructor-arg index="0" value="2015-12-12 12:12:10"></constructor-arg>
<constructor-arg index="1" value="yyyy-MM-dd HH:mm:ss"></constructor-arg>
</bean>
</property>
<!--上述所需要的类:-->
public class StringUtils {
public static Date parseDate(String dateString,String pattern) throws ParseException{
return new SimpleDateFormat(pattern).parse(dateString);
}
}
b.构造函数注入
id:为唯一ID
class:实体类的地址
index:按照参数索引匹配,应从0开始,依次写入. 切记一定和构造函数参数的顺序保持一致( 其目的找到和自己心仪的"妹子" )
type:定义属性的类型
value:属性赋值.
<bean id="user5" class="com.ioc.User">
<constructor-arg index="0" type="java.lang.String" value="name"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="123456ADSDF"></constructor-arg>
<constructor-arg index="2" type="java.lang.Integer"><value>30</value></constructor-arg>
<constructor-arg index="3" type="java.lang.Float" value="89.9234"></constructor-arg>
<constructor-arg index="4" type="java.lang.String" value="578979789797979"></constructor-arg>
<constructor-arg index="5" type="java.lang.String" value="湖南长沙"></constructor-arg>
</bean>
<!--c.工厂注入(set)-->
set注入:它是怎么实例化对象 调用默认构造函数,如果一个类中你定义了带有参数的构造函数,一定要把默认的构造函数定义出来
构造函数注入:选择带有参数的,他要赋值
工厂注入:
set注入
构造函数注入都是给初始化对象和赋值
工厂模式
//属性(基础属性和对象属性)
byte short int long
float double
boolean char和
Byte Short Integer Long
Float Double
Boolean Character
String 都采用value 进行赋值
<property name="username" value="keke"/>
对象属性:采用引用(ref)赋值
<property name="teacher" ref="teacher"/>
d.bean.xml 常用属性
{<!-- 配置过程中会出现一些特殊字符 <![CDATA[字符串]]>
解决办法一: < = < > = > & = & " = " ' = '
解决方法二: <![CDATA[字符串]]>
需要值:就用value
需要对象或者引用: 定义一个bean 通过ref="beanid"}
1>bean作用域[scope = "xxx"]:
scope:范围,作用域===它就专门去控制当前bean对象的什么周期
singleton:单例模式===它是被spring应用上下文进行管理和回收===BeanDefinitMap
prototype:多例模式===它是不会被spring应用上下文进行管理,它值只实例化,被jvm gc负责回收
2>懒加载lazy-init
lazy-init:默认值false
代表延迟加载对象创建.加了延迟的bean他们在调用getBean方法的时候才被实例化
注意点:如果你这个延迟的对象被一个没有加延迟的bean引用了的话,那么这个设置就忽略,立即加载
init-method:创建对象过程中,执行方法
init-method:单bean方法的调用
<bean id="user" class="com.ioc.User" init-method="init" p:username="mac"></bean>
<bean id="user2" class="com.ioc.User" lazy-init="true"></bean>
*3>抽象类与继承and依赖*
Parent 抽象类有构造函数没有? A:y B n 抽象类不能实例化, 抽象类中的构造函数其实说明白就是给通用属性赋值使用,给子类的构造函数去调用(super).
依赖:两者之间才叫依赖bean和bean之间
depends-on是指指定Bean初始化及销毁时的顺序,使用depends-on属性指定的Bean要先初始化完毕后才初始化当前Bean,由于只有"singleton"Bean才能被Spring管理销毁,所以当指定的Bean都是"singleton"时,使用depends-on属性指定的Bean要在指定的Bean之后销毁>
<bean id="abstractUser" class="com.ioc.User" p:username="keke" p:password="30" abstract="true"></bean>
<bean id="keke" parent="abstractUser" p:username="累土" p:address="湖南长沙"></bean>
<bean id="keke2" parent="abstractUser" p:address="湖南长沙"></bean>
<bean id="connection" class="com.ioc.ConnectionUtil" depends-on="oracle"></bean>
<bean id="mysql" class="com.ioc.MysqlDriver"></bean>
<bean id="oracle" class="com.ioc.OracleDriver"></bean>
“`
3>注解配置(spring3.x之后出现annotation)
MVC: Model(模型层: 负责数据的存储和交换. javabean,bean,vo,pojo,model,entity) Controller(控制层: 将数据传入和设置到模型层. service / dao ) View(视图层: 手机数据传输给模型层. controller/action/jsp)
4>零配置(spring-boot)