介绍
Spring框架是个轻量级的JAVA EE框架。所谓轻量级,是指不依赖于容器就能运行的。Struts、Hibernate也是轻量级的。
轻量级框架是相对于重量级框架而言的,重量级框架必须依赖特定的容器,例如EJB框架就必须运行在Glassfish、JBOSS等支持EJB的容器中,而不能运行在TOMCAT中。
SPring以IOC、AOP为主要思想,其中IOC,inversion of controller 是指控制反转或者反向控制。在Spring框架中我们通过配置创建类对象,由Spring在运行阶段实例化,组装对象。AOP Aspect Oriented Programming,面向切面编程,其思想史在执行某些代码前执行另外的代码,使程序更加灵活,扩展性更好,可以随便的添加,删除某些功能,Servlet中的Filter便是一种AOP思想的实现。
Spring同时也是个“一站式”框架,即Spring在JAVAEE 的三层框架(表现层、业务逻辑层、数据访问层)中,每一层均提供了不同的解决技术。如下:
表现层:Spring MVC
业务逻辑层:IOC
数据访问层:jdbcTemplate
IOC入门:
1、导入Spring框架中的相关jar包,这里只导入Spring的Core模块下的jar包(Core模块是框架的核心类库),以及支持日志输出的commons-logging和log4j的jar包。
2、创建一个普通的java类,并在该类中创建方法如下:
User.java
public class User{
public void add(){
System.out.println("add...");
}
}
3、创建Spring的配置文件,进行Bean的配置
Spring的核心配置文件名称和位置不是固定的,但是官方建议将核心配置文件放在src目录下,且命名为applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/heans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframeword.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.sxd">
<bean id="user" class="com.newcode.ioc.User"></bean>
</beans>
4、编写测试类进行测试,通过配置文件创建类对象
testIOC.java
public class TestIOC{
public void testUser(){
ApplicationContext context = new ClasspathXmlApplicationContext("applicationContext.xml");
User user = (User)context.getBean("user");
user.add();
}
}
Bean实例化的方式
在Spring中通过配置文件创建对象,Bean实例化三种方式实现:
1、使用类的无参构造创建,如:
<bean id="user" class="com.newcode.ioc.User"></bean>
2、使用静态工厂 创建
如果一个Bean不能通过new直接实现实例化,而是通过工厂的某个静态方法创建的,需要把<bean>的class属性配置伪工厂类,如:
<bean id="user" class="com.newcode.ioc.UserFactory" factory-method="createInstance"></bean>
3、使用实例工厂创建
如果一个Bean不能通过new直接实例化,而是通过工厂类的某个实例方法创建的,需要先配置工厂的<bean>标签,然后在需要创建的对象bean标签的factory-bean属性配置为工厂类对象,factory-method属性配置为生产实例的方法,如:
<bean id="userFactory" class="com.newcode.ioc.UserFactory"></bean>
<bean id="user" factory-bean="userFactory" factory-method="createInstance"></bean>
Bean标签的常用属性
1、id属性,用于指定配置对象的名称,不能包含特殊符号
2、class属性,创建对象所在类的全路径
3、name属性,功能同id属性一致,但是在name属性中可以包含特殊符号
4、scope属性
(1)singleton:默认值,单例模式下,在程序中只有一个实例。非单例模式下,每次请求该bean,都会生成一个新的对象
(2)prototype:多例
(3)request:创建对象后将对象存放到request域
(4)session:创建对象后将对象存放到session域中
(5)globalSession:创建对象后将对象存放到globalSession域
属性注入:
属性注入指创建对象时,向类对象的属性设置属性值。
在Spring框架中支持set方法注入和有参构造函数注入,即创建对象后通过set设置属性或采用有参构造函数创建对象并初始化
使用有参构造函数注入属性
Demo1.java 提供有参的构造方法
public class Demo1{
private String demoName;
public Demo1(String demoName){
this.demoName = demoName;
}
public void out(){
System.out.println(demoName);
}
}
bean的配置
<bean id="demo1" class="com.newcode.Demo1">
<constructor-arg name="demoName" value="demo1"></constructor-arg>
</bean>
使用set方法注入属性
案例:
Demo2.java提供属性的set方法
public class Demo2{
private String demoName;
public void setDemoName(String demoname){
this.demoName = demoName;
}
public void out(){
System.out.println(demoName);
}
}
bean的配置
<bean id="demo2" class="com.newcode.ioc.Demo2">
<property name="demoName" value="Demo2"></property>
</bean>
p名称空间注入属性
之前提到了一种set方法的属性注入方式,这里将介绍另一种属性注入的方式,名为p名称空间注入
<bean id="demo2" class="com.nwcode.ioc.Demo2" p:demoname="demo2"></bean>