一、概述
Spring是一个开源框架,它的核心是控制反转(IOC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。
EE 开发分成三层结构:
* WEB 层:Spring MVC.
* 业务层:Bean 管理:(IOC)
* 持久层:Spring 的 JDBC 模板.ORM 模板用于整合其他的持久层框 架
注:Spring框架既可以单独使用 ,也可以结合其他优秀框架一起使用。
二、环境搭建
开发包:
下载地址:http://repo.springsource.org/libs-release-local/org/springframework/spring 解压(Spring目录结构:docs api和开发规范)
导入jar包后在src下创建核心配置文件 applicationContext.xml该文件名称和位置不固定
二、IOC
IOC:Inversion of Control 控制反转,指的是对象的创建反转给Spring。其作用是实现了程序的解耦合
IOC图解:
案例:以User类为例
1创建类
public class User{ private String username; private User user ; public void User(){};
public void User(User user){ this.user = user; }
public void User(String username){ this.username = username; } public void show(){ System.out.println("Hello IOC!"); }
2创建名为applicationContext.xml配置文件并引入scheme约束
3配置参数
在applicationContext.xml配置文件中配置一下内容
<bean id = "user" class = "cn.User"></bean>
4.测试
public static void main(String [] args){ //加载Spring配置文件,创建对象 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //得到配置创建的对象 User user = (User) context.getBean("user"); user.show(); }
四、Spring的bean管理(xml方式)
bean实例化的三种方式:
1.使用类的无参构造
<bean id = "user" class = "cn.User"></bean>
2.使用静态工厂创建
》创建静态方法返回类对象
public class BeanFactory{ public static User getBean(){ return new User(); } }
》配置文件
3.使用实例工厂创建
》创建工厂类
public class BeanFactory{ public User getBean(){ return new User(); } }
》配置文件
bean标签常用属性:
id:给bean命名,id属性值任意(不能含特殊符号),根据id得到配置对象。
class:创建对象类所在的全路径
name:功能和id一样,但是在name属性中可以包括特殊符号
Scope:默认值为singleton(单例),prototype(多例),request(把创建的对象保存到request域中),session(把创建的对象保存到session域中),globalSession(把创建的对象保存到globalSession中);
五、属性注入
1.使用有参构造注入属性
<bean id = "user2" class = "cn.User" > <constructor-arg name = "username" value = "ZhangSan"></constructor-org> </bean>
2.使用set方法注入属性(重点)
<bean id = "user3" class = "cn.User"> <!--name为属性名称 value为设置的具体值--> <property name = "username" value = "LiSi"></property> </bean>
3.P名称空间注入
首先引入约束
配置文件
<bean id = "user" class = "cn.User" p:name = "LiHong"></bean>
注入对象类型的属性
<bean id = "user3" class = "cn.User" ></bean> <bean id = "user4" class = "cn.User" > <property name = "user3" ref = "user"></property> </bean>
注入复杂属性
<bean id="person" class="cn.User"> <!-- 数组 --> <property name="arrs"> <list> <value>小王</value> <value>小马</value> <value>小宋</value> </list> </property> <!-- list --> <property name="list"> <list> <value>小奥</value> <value>小金</value> <value>小普</value> </list> </property> <!-- map --> <property name="map"> <map> <entry key="aa" value="lucy"></entry> <entry key="bb" value="mary"></entry> <entry key="cc" value="tom"></entry> </map> </property> <!-- properties --> <property name="properties"> <props> <prop key="driverclass">com.mysql.jdbc.Driver</prop> <prop key="username">root</prop> </props> </property> </bean>