spring是一个开放源代码的Java EE框架,主要是为了解决企业应用程序维护复杂性而创建的。spring简化了Java EE开发,提升了软件项目开发效率,提高开发效率的解决办法是使用模块结构,每一个模块处理一个功能或者是业务。spring的主要的模块如下图:
在spring框架中提供了一个JavaBean容器,在这个容器中存储不同的数据类型的JavaBean对象,容器中可以将很多种不同功能的JavaBean进行整合,进行集成,来达到综合技术应用的目的。
spring的好处:
(1)方便解耦,简化开发:spring一大重要特性控制翻转,可以将所有对象创建和依赖关系维护由spring管理;
(2)AOP:spring提供面向切面编程,可以方便实现对程序进行权限拦截、运行监控等功能;
(3)声明式事务的支持
(4)方便测试:支持junit4
(5)方便集成各种优秀框架
spring快速入门
(1)创建一个项目,在创建项目时,选择spring。将需要用到的jar包放在一个文件夹,创建时在右下角use library选择存储jar包的文件夹,选中所有jar包。如下图所示:
我导入的jar包:
(2)配置项目,在src下创建配置文件beans.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">
</beans>
(3)简单实现控制反转。
spring很重要的一个特性就是控制反转。简单的说,就是将对象的创建,维护,销毁等工作由开发人员管理改为交由spring管理。控制权实现由开发人员到spring的反转。
创建一个接口:
package com.spring.service;
public interface UserService {
public void add();
}
创建实现类:
package com.spring.service;
public class UserServiceimpl implements UserService {
@Override
public void add() {
System.out.println("添加一个用户");
}
}
在配置文件beans.xml配置,在beans标签内部添加如下代码段,其中id是自己起的标识符名称,class是类的全限定名称。
<bean id="userService" class="com.spring.service.UserServiceimpl"> </bean>
编写测试文件:
package com.spring.test;
import com.spring.service.UserService;
import com.spring.service.UserServiceimpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo1 {
@Test
public void test1(){
//加载beans.xml配置文件
//注意,在加载配置文件时,ClassPathXmlApplicationContext的参数路径是相对于classpath的路径
//执行了这一句对象就已经生成并存放于DI容器中
ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
//从容器中获取对象
UserServiceimpl userservice= (UserServiceimpl) context.getBean("userService");
userservice.add();
}
}
执行结果如下图所示:
从DI容器获取对象的两种方法
(1)getbean(类名.class):上面例子中,可以选用
UserServiceimpl userservice= (UserServiceimpl) context.getBean(UserServiceimpl.class);
这个方法适用于容器中只有一个该类的实例。
(2)getbean(“配置文件标识符”):本文即采用这种办法,这种办法适用于容器中出现多个相同数据类型的对象时。如下面代码段,
<bean id="userService1" class="com.spring.service.UserServiceimpl"> </bean>
<bean id="userService2" class="com.spring.service.UserServiceimpl"></bean>
此时需要分别取用如下所示:
UserServiceimpl userservice1= (UserServiceimpl) context.getBean("userService1");
userservice1.add();
UserServiceimpl userservice2= (UserServiceimpl) context.getBean("userService1");
userservice2.add();
加载spring容器的三种方式
(1)类路径获得配置文件:本文即采取这种办法
ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
(2)采用文件系统路径,即绝对路径:
ApplicationContext context=new FileSystemXmlApplicationContext("C:\\Users\\Administrator\\IdeaProjects\\myspring\\src\\beans.xml");
(3)使用BeanFactory,路径需是绝对路径
BeanFactory beanFactory=new FileSystemXmlApplicationContext("C:\\\\Users\\\\Administrator\\\\IdeaProjects\\\\myspring\\\\src\\\\beans.xml");
**BeanFactory和ApplicationContext的对比:**ApplicationContext在完成加载配置文件时就已经初始化Bean,而BeanFactory采取延时加载,第一次getBean时才会初始化Bean。
欢迎指正哈!