Spring介绍
Spring框架是个轻量级的Java EE框架。所谓轻量级,是指不依赖于容器就能运行的。
轻量级框架是相对于重量级框架而言的,重量级框架必须依赖特定的容器,例如EJB框架就必须运行在Glassfish、JBoss等支持EJB的容器中,而不能运行在Tomcat中。
Spring以IoC、AOP为主要思想,其中IoC,Inversion of Control 指控制反转或反向控制。在Spring框架中我们通过配置创建类对象,由Spring在运行阶段实例化、组装对象。AOP,Aspect Oriented Programming,面向切面编程,其思想是在执行某些代码前执行另外的代码,使程序更灵活、扩展性更好,可以随便地添加、删除某些功能。Servlet中的Filter便是一种AOP思想的实现。
Spring同时也是一个“一站式”框架,即Spring在JavaEE的三层架构[表现层(Web层)、业务逻辑层(Service层)、数据访问层(DAO层)]中,每一层均提供了不同的解决技术。如下: 表现层(Web层):Spring MVC 业务逻辑层(Service层):Spring的IoC 数据访问层(DAO层):Spring的jdbcTemplate Spring中的IoC操作 将对象的创建交由Spring框架进行管理。
针对自己初学者刚入门框架的一种学习分享,只是学会怎么去使用框架来实现一些Demo的分享。
IoC
IoC即控制反转操作分为:IoC配置文件方式和IoC的注解方式。
(1)导入Spring框架中的相关jar包,以及 支持日志输出的 commons-logging 和 log4j 的jar包;
(2)创建一个普通的Java类,并在该类中创建方法,如下:
User.java package ioc;
public class User {
public void add() {
System.out.println("add...");
}
}
(3)创建Spring的配置文件,进行Bean的配置
Spring的核心配置文件名称和位置不是固定的。但官方件建议将该核心配置文件放在src目录下,且命名为 applicationContext.xml。这个命名也不是固定的,但是用的时候相应注意就好。
这里为了方便,将核心配置文件放在src目录下,并命名为 bean1.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">
<bean id="user" class="com.wm103.ioc.User">
</bean>
</beans>
(4)编写测试类进行测试,通过配置文件创建类对象
TestIoC.java package ioc; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
@Test public void testUser() {
// 1. 加载Spring配置文件,根据创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
// 2. 得到配置创建的对象
User user = (User) context.getBean("user");
System.out.println(user);
user.add();
}
}
Spring的bean管理(配置文件) Bean实例化的方式
在Spring中通过配置文件创建对象。 Bean实例化三种方式实现:
(1)使用类的无参数构造创建:
<!-- 等同于 user = new ioc.User(); -->
<bean id="user" class="ioc.User">
</bean>
(2)使用静态工厂创建
<bean id="user" class="ioc.UserFactory" factory-method="createInstance">
</bean>
(3)使用实例工厂创建
<bean id="userFactory" class="com.wm103.ioc.UserFactory"></bean>
<bean id="user" factory-bean="userFactory" factory-method="createInstance">
</bean>
Bean标签的常用属性
(1)id属性:
用于指定配置对象的名称,不能包含特殊符号。
(2)class属性:创建对象所在类的全路径。
(3)name属性:功能同id属性一致。但是在name属性值中可以包含特殊符号。
(4)scope属性 singleton:默认值,单例 单例模式下,在程序下只有一个实例。非单态模式下,每次请求该Bean,都会生成一个新的对象。 prototype:多例 request:创建对象后将对象存放到request域 session:创建对象后将对象存放到session域 globalSession:创建对象后将对象存放到globalSession域 属性注入
属性注入指创建对象时,向类对象的属性设置属性值。
在Spring框架中支持set方法注入和有参构造函数注入,即创建对象后通过set方法设置属性或采用有参构造函数创建对象并初始化属性。 使用有参构造函数注入属性
package ioc;
public class Demo1 {
private String demoName;
public Demo1(String demoName) {
this.demoName = demoName;
}
public void out() {
System.out.println("This is Demo1.");
}
}
bean的配置:
<bean id="demo1" class="com.wm103.ioc.Demo1">
<constructor-arg name="demoName" value="Demo1">
</constructor-arg>
</bean>
创建Demo1对象进行测试:
@Test public void testDemo1() {
// 1. 加载Spring配置文件,根据创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
// 2. 得到配置创建的对象
Demo1 demo1 = (Demo1) context.getBean("demo1");
System.out.println(demo1);
demo1.out();
}
使用set方法注入属性
package ioc;
public class Demo2 {
private String demoName;
public void setDemoName(String demoName) {
this.demoName = demoName;
}
public void out() {
System.out.println("This is Demo2.");
}
}
bean的配置:
<bean id="demo2" class="com.wm103.ioc.Demo2">
<property name="demoName" value="Demo2">
</property>
</bean>
创建Demo2对象进行测试:
@Test public void testDemo2() {
// 1. 加载Spring配置文件,根据创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
// 2. 得到配置创建的对象
Demo2 demo2 = (Demo2) context.getBean("demo2");
System.out.println(demo2);
demo2.out(); }