Spring2.5 (J2EE开源框架.)
1.Spring是什么? Spring,J2EE的开源框架. 主要作用:对整个项目的管理. Spring可以使整个项目的耦合度降低. Spring可以使项目更加的容易维护.更加容易扩展.
2.Spring框架主要分为那几个部分? 七个部分: 1.Spring的核心 BeanFactory. 2.Spring的上下文.(Spring Context-->ApplicationContext) 3.Spring的IOC机制.(依赖注入/控制反转.) 4.Spring的 DAO (Spring对JDBC的支持.) 5.Spring的 ORM (ORM是对象关系映射.hibernate,ibatis等开源框架都是ORM的产品.Spring对hibernate的支持.) 6.Spring的 AOP (面向切面编程/面向方面编程.) AOP可以开发中间件服务.(设计模式中的代理模式(静态代理,动态代理.).) 7.Spring的WEB(SSH三大框架的整合)
3.Spring的IOC机制 3.1 什么是IOC? 术语:依赖注入,控制反转.IOC IOC:Spring通过读取配置文件动态获取实例的机制. 3.2实现IOC机制,Spring提供了那几种方式? 三种方式: set方式的注入(最常用的.) 基于构造方法的注入 基于接口的注入(已经淘汰.) 在普通的java程序中如何获取实例? 两种: 基于set方法. User user = new User(); user.setName("jack"); user.setPassword("123"); 基于构造方法. User user = new User("jack","123"); 基于SET方式的注入实现IOC机制,必须给实体类的每一个属性提供set方法. 步骤: 1.定义实体类. 必须提供无参数构造方法. 如果有属性,必须给属性提供setter方法. 如: public class User{ private String name; public User(){} public void setName(String name){ this.name = name; } } 2.编写Spring的配置文件applicationContext.xml文件.(注入bean) <bean id="userBean" class="User"> <property name="name"> <value>张三</value> </property> </bean> 3.编写Spring的代码 //获取资源 Resource resource = new ClassPathResource("applicationContext.xml"); //获取bean工厂实例对象 BeanFactory factory = new XmlBeanFactory(resource); //调用getBean方法获取实例bean Object obj = factory.getBean("userBean"); 注意:1.BeanFactory可以用下列代码替换. ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = (User)factory.getBean("userBean"); 2.获取实例可以通过Spring配置文件中bean标签的id的值和name的值. 3.Spring的IOC默认情况获取bean都是采用了单例模式. 4.Spring配置文件中配置bean时,给属性赋值,<property>标签可以有两种写法: 第一种写法: <property name="username" value="张三"></property> 第二种写法: <property name="password"> <value>123</value> </property> 注意:bean的属性类型必须是 (基本类型+基本类型包装类+字符串类型)才可以使用value属性赋值. 基于构造器的方式实现IOC机制. 步骤: 1.定义实体类,实体类尽可能多提供构造方法,(构造方法最少应该有一个.) public class Customer{ private String name; private String phone; public Customer(){} public Customer(String name,String phone){ this.name = name; this.phone = phone; } } 2.写Spring的配置文件 <bean id="customerBean" class="Customer"> <constructor-arg index="0" type="java.lang.String" value="张三" /> <constructor-arg index="0" type="java.lang.String"> <value>12345678</value> <!--如果属性不是(基本类型+String),需要使用 ref 标签赋值.--> </constructor-arg> </bean> 3.写Spring的IOC代码.创建实例 3.3如果实体类的属性是一个集合.应该如何注入? public class A{ private List list; private Set set; private Map map; private Properties p; } <!-- 注入addrBean --> <bean id="addrBean" class="com.sinojava.spring.po.Address"> <property name="city"> <value>上海</value> </property> <property name="street"> <value>浦东</value> </property> <property name="zipcode"> <value>10086</value> </property> </bean> <!-- 注入systimeBean --> <bean id="sysTimeBean" class="java.util.Date"></bean> <!-- 注入Abean --> <bean id="A" class="com.sinojava.spring.po.A"> <!-- 未使用泛型的list --> <property name="list"> <list> <value>abc</value> <ref local="addrBean"/> <value>123</value> <ref local="sysTimeBean"/> <value>12.3</value> </list> </property> <!-- 使用了泛型的list --> <property name="users"> <list value-type="java.lang.String"> <value>username</value> <value>password</value> <value>url</value> </list> </property> <!-- set --> <property name="strs"> <set value-type="java.lang.String"> <value>jack</value> <value>rose</value> </set> </property> <!-- map --> <property name="maps"> <map> <entry key="1"> <value>张三</value> </entry> <entry key="2"> <value>李四</value> </entry> </map> </property> <!-- properties --> <property name="p"> <props> <prop key="username"> scott </prop> <prop key="password">tiger</prop> <prop key="url">orale:thin:@localhost:1521;sinojava</prop> </props> </property> </bean>