Spring:是一个分层的一站式轻量级开源框架。Hibernate-持久层的ORM框架,Struts2-Web层的MVC框架
一站式框架:有EE开发的每一层解决方案
Web层:SpringMVC
Service层:Spring的Bean管理,Spring的声明式事务
Dao层:Spring的JDBC模板,Spring的ORM模块
1.初步了解IOC(控制反转)
新建JavaWeb项目,导入jar包
spring开发环境下载地址https://repo.spring.io/release/org/springframework/spring/
下载spring-framework-4.2.3.RELEASE-dist.zip并解压
导入下列jar包
新建UserDao接口以及他的实现类UserDaoImpl随便写个方法,只要能在控制台输出点东西就行。然后在src目录下新建applicationContext.xml文件,引入约束,在开发环境中的spring-framework-4.2.4.RELEASE-distdocsspring-framework-referencehtml下的xsd-configuration.html中页面最底部,有一个例子
引入约束之后,配置UserDao的bean
编写测试类
2.IOC和DI
IOC:控制反转,将对象的创建权反转给Spring
DI:依赖注入,前提是必须有IOC环境,配置了相应的bean。
当Spring在帮我们创建一个类的示例的时候,发现这个类需要某个属性,他会自动将属性设置到类里面,例如当UserDaoImpl中有一个属性username的时候,传统方式UserDao userDao=new UserDaoImpl(),并不能调用setUsername为其设置name,因为UserDao这个接口中没有这个方法,就无法设置username属性。当将类的创建教给Spring后,他会在创建的时候将该类需要的属性也一并注入到类中(需要给bean配置property标签),这就叫依赖注入(DI),此时输出的值是有username的
3.Spring的工厂类
3_1.BeanFactory(老版本)
BeanFactory---会在调用getBean的时候实例化Spring管理的类
3_2.ApplicationContext(新版本)
ApplicationContext---会在加载配置文件的时候实例化Spring管理的类
ApplicationContext有两个实现类
ClassPathXmlApplicationContext.java :加载类路径下的配置文件(src路径下的配置文件)
FileSystemXmlApplicationContext.java :加载文件系统下的配置文件(项目之外,如本地磁盘上的配置文件)
4.Spring的配置
属性注入的方式:
普通注入:
使用p名称空间注入:
使用SpEL属性注入:注入普通属性时字符串需要加单引号,#{}中可以使用其他类的方法或属性, 比 如#{car2.name} , #{car2.getName()}
注入List和Map
5.Spring的IOC注解方式
入门
1.在原来的基础上引入spring-aop-4.2.4.RELEASE.jar(一共5个Spring的包,两个日志文件的包)
2.在src下的applicationContext.xml下引入context的约束,上面引入了bean的约束,bean的约束是最基本的约束,引入方式和上面一样,在html中找context的约束。
3.在xml中配置要使用注解的包,包下的类就可以使用注解了
4.添加注解
5.注解方式的属性注入,这种方式不需要提供set方法,只需要在要注入的属性上面加入@Value("要注入的值"),如果有set方法就在set方法上面加上该注解
注解详情
1.@Component("id"):组件
*_修饰一个类,将一个类交给Spring管理
*_有三个衍生注解(目前功能和Component是一样的)
*Controller :修饰web层
*Service :修饰Service层
*Repository :修饰Dao层
2.属性注入的注解:
* @Value("value"):设置普通属性的值
* @Autowried:设置对象类型的属性的值,按照类型完成属性注入(也就是说Component设置的id在这个注解下时没用的,他会找到相应接口的实现类进行注入)
* @Resource(name="id"):设置对象类型的属性,按照名称完成注入,id的值必须与你所需对象的Component注解的id值一样
6.使用XML和注解整合开发(XML管理bean,注解实现属性注入)
注意添加<context:annotation-config/>配置,原来的<context:component-scan base-package="xx.xxx"/>配置可以删除,这两个配置后者的功能中包括前者的功能,区别大致就是前者用于激活那些已经在spring容器里注册过的bean,后者不仅可以激活,还可以注册bean。详情请参考这篇博客:https://www.cnblogs.com/leiOOlei/p/3713989.html