Spring
一、是什么
是一个轻量级的框架,框架是开发好的程序。在框架的基础上实现对应的功能,按照框架要求实现。
二、优势
1、方便解耦(耦合度:程序之间的依赖关系,耦合度越高程序修改越麻烦) 2、aop面向切面编程技术的支持
3、声明事务管理
4、降低JavaEE使用api的难度
5、方便测试
6、集合了多个优秀框架
三、分类
1、Spring data
2、Springboot
3、Springclound(分布式)
四、Spring使用
一)、项目的创建
1、导入jar包 2、创建配置文件applictionContext.xml
3、配置文件添加需要的约束
二)、IOC使用
IOC就是把创建对象的权限交给了applictionContext.xml 文件,其中的每一个bean就是一个对象
IOC原理图
1、创建对象
<!--id:标准为和接口类名保持一致首字符小写 class:实现类全路径-->
<bean id="user" class="com.hp.pojo.User"></bean>
2、使用
@Test
public void userDao(){
//获取配置文件对象
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("appliconContext.xml");
//1、通过getBean()方法获取类对象,强制转型
UserDao userDao = (UserDao) classPathXmlApplicationContext.getBean("userDao");
//1、通过getBean()方法获取类对象,写入父类名.class转型
//User user = classPathXmlApplicationContext.getBean("user",User.class);
//调用方法
userDao.eat();
}
二)、DI依赖注入
依赖注入就是给bean实例化对象的属性赋值
1)、构造方法注入
前提:创建实体类必须又无参构造方法
<!--set方法注入-->
<!-- class:实体类全路径 -->
<bean id="user" class="com.hp.pojo.User">
<!-- name:实体类属性名 value:给name属性赋值 -->
<property name="id" value="1"></property>
<property name="name" value="zzc"></property>
<!-- ref:引入其他bean对象值 -->
<property name="birthday" ref="birth"></property>
</bean>
2)、set方法注入
前提:实体类必须有set方法赋值,get方法取值
<!--构造方法注入-->
<bean id="user1" class="com.hp.pojo.User">
<constructor-arg name="id" value="2"></constructor-arg>
<constructor-arg name="name" value="gy"></constructor-arg>
<constructor-arg name="birthday" ref="birth"></constructor-arg>
</bean>
3)、p标签注入
前提:配置文件必须有p标签头部信息
<!--p标签表头信息-->
xmlns:p="http://www.springframework.org/schema/p"
<!--p标签注入-->
<!-- p:属性名="值" -->
<bean id="user2" class="com.hp.pojo.User" p:id="3" p:name="zc" />
3)、SPel表达式注入
前提:在创建一个实体类对象,改值类型与要赋值的属性类型相同
private Date time;
public Date getTime() {
return new Date();
}
<!--SPel属性注入-->
<!--获取值语法#{对象名.get属性名}-->
<!-- 另一个实体类对象-->
<bean id="userinfo" class="com.hp.pojo.Userinfo"></bean>
<!-- 引入其他实体类对象属性值,前提必须改值类型与要赋值的属性类型相同-->
<bean id="user3" class="com.hp.pojo.User">
<property name="birthday" value="#{userinfo.time}"></property>
</bean>
3)、集合注入
前提:在一个实体类创建多个对应集合类属性
private String[] array;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
(1)、list集合注入
<!-- list name="实体属性名" -->
<property name="list">
<list>
<!-- 赋值-->
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
(2)、set集合注入
<!-- set -->
<property name="set">
<set>
<value>4</value>
<value>5</value>
</set>
</property>
(3)、map集合注入
<!--map-->
<property name="map">
<map>
<entry key="name" value="zzc"></entry>
</map>
</property>
五、XML开发和注解开发的优势
1、Xml开发维护起来方便,但是配置比较繁琐,代码量大。
2、注解开发维护困难,维护需要改源代码,工作量大。方面快速开发
3、Xml和注解混合开发。