2.Spring的优点:
2.1方便解耦,简化开发 (高内聚低耦合)
2.2Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
spring工厂是用于生成bean
2.3 AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
2.4 声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
2.5方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
2.6方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
2.7降低JavaEE API的使用难度
3 入门案例
3.1导入jar包
3.2在src目录下建立目标和xml文件
3.3 xml代码解析:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置service
<bean> 配置需要创建的对象
id :用于之后从spring容器获得实例时使用的 setBookdao >Bookdao >bookdao
class :需要创建实例的全限定类名
-->
<bean id="bookServiceId" class="com.heima.spring_day01.bookServiceImpl" scope="prototype">
<property name="bookdao" ref="bookDaoId"></property>
</bean>
<bean id="bookDaoId" class="com.heima.spring_day01.bookDaoImpl">
</bean>
</beans>
建立两个接口和两个实现类,在bookService里调用bookDao类中的add方法,所以xml里需要两个Bean,一个sericebean 一个daobean,以前用的时候都是通过new一个对象来实现,现在利用spring的话,把new的操作交给spring来执行,只需要调用getbean方法就可以获取对应的bean对象。
<bean id="bookServiceId" class="com.heima.spring_day01.bookServiceImpl" scope="prototype"> 这个id相当于一个引用键值,class是用来产生一个对象的。
<property>是class对应的属性。ref--引用的bean.
测试类代码:
@Test
public void fun()
{
String xmlPath = "/com/heima/spring_day01/bean.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
bookService bookService = (com.heima.spring_day01.bookService) applicationContext.getBean("bookServiceId");
bookService bookService1 = (com.heima.spring_day01.bookService) applicationContext.getBean("bookServiceId");
System.out.println(bookService==bookService1);
bookService.save();
}
String xmlPath = "/com/heima/spring_day01/bean.xml"; 这个是bean.xml的路径
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);通过读取配置文件来建立一个beanFactory。
bookService bookService = (com.heima.spring_day01.bookService) applicationContext.getBean("bookServiceId"); 通过xml文件的id键值来获得对应的beanFactory中的对象。
测试:
5.spring的属性注入
1.构造函数
通过bean.xml文件就能给对应类的构造函数进行赋值操作
使用 <constructor-arg>来进行配置
2.setter方法
<property name = "" value=""/>属性来进行赋值
3.集合注入
使用 <property name="dStrings"> //dStrings是数据类型 可以是 set map class list 等
<array> 对应数据类型:<map><list>等
</array>
</property>
4.集合注入的xml配置:
<map>要使用<entry key="rose" value="肉丝"/>来设置key---value
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="collectDataId" class="com.sping.bean_set.Collect">
<property name="dStrings">
<array>
<value>ha1</value>
<value>ha2</value>
<value>ha3</value>
<value>ha4</value>
</array>
</property>
<property name="setStrings">
<set>
<value>小伙子1</value>
<value>小伙子2</value>
<value>小伙子3</value>
<value>小伙子4</value>
</set>
</property>
<property name="listStrings">
<list>
<value>hhhh1</value>
<value>hhhh2</value>
<value>hhhh3</value>
<value>hhhh4</value>
<value>hhhh5</value>
<value>hhhh6</value>
</list>
</property>
<property name="mapStrings">
<map>
<entry key="rose" value="肉丝"/>
<entry key="jack" value="肉丝"/>
</map>
</property>
</bean>
</beans>
集合注入的类:
package com.sping.bean_set;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.Properties;
public class Collect {
private String[] dStrings;
private Set<String> setStrings;
private List<String> listStrings;
private Map<String, String> mapStrings;
private Properties propsData;
public String[] getdStrings() {
return dStrings;
}
public void setdStrings(String[] dStrings) {
this.dStrings = dStrings;
}
public Set<String> getSetStrings() {
return setStrings;
}
public void setSetStrings(Set<String> setStrings) {
this.setStrings = setStrings;
}
public List<String> getListStrings() {
return listStrings;
}
public void setListStrings(List<String> listStrings) {
this.listStrings = listStrings;
}
public Map<String, String> getMapStrings() {
return mapStrings;
}
public void setMapStrings(Map<String, String> mapStrings) {
this.mapStrings = mapStrings;
}
public Properties getPropsData() {
return propsData;
}
public void setPropsData(Properties propsData) {
this.propsData = propsData;
}
@Override
public String toString() {
return "Collect [\ndStrings=" + Arrays.toString(dStrings) + ", \nsetStrings=" + setStrings + ", \nlistStrings="
+ listStrings + ", \nmapStrings=" + mapStrings + ", \npropsData=" + propsData + "]";
}
}
测试类:
public class Testfun {
@Test
public void fun() {
String xml = "/com/sping/bean_set/bean.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xml);
Collect collect = (Collect) applicationContext.getBean("collectDataId");
System.out.println(collect.toString());
}
}