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()); } }
测试结果: