spring 框架
- 基于java的轻量级J2EE应用框架,服务于整个J2EE开发过程。spring在web开发的各层都提供了自己的解决方案。
| 表现层 :servlet jsp struts2 -> spring mvc (spring的一个模块)
web分层 | 业务逻辑层:service(业务相关) -> bean管理,AOP,事务管理
| 数据层:jdbc hibernate mybatis -> spring jdbcTemplate(不常用的)
- 有 EJB (Enterprice Java Bean) 演变而来
- 核心 jar 包 (补充:同名jar包有三份,出来本身的一份,还有doc说明文档,source源码)
- 核心技术
IOC(Inversion of control) 控制反转 :程序将对资源的控制权反转给spring spring是通过工厂模式和配置文件实现控制反转的
DI(Dependency Injection) 依赖注入:程序被动的等待spring为其注入资源 IOC和DI其实是同一件事
类中属性最好都写上set/get方法,DI是依据set/get方法找到对应属性名的
AOP 面向切面编程
- applicationContext.xml
实例情景:student类中注入address类
spring 认为所有的资源都是bean ,所以在xml中配置资源就是配置bean
setter注入属性的时候,<property> 元素中的name=值,值找的是set方法后半部分的内容.不是根据属性名称找的,而是根据属性的set方法找的值。
还有一种注入方式:构造器注入,<constructor-args name=”形参名” value=”属性值”/>
main方法中进行测试
- spring工厂类
在上述实例中的main方法中,首先创建了一个spring工厂类,然后从工厂类中取出资源
FileSystemXmlApplicationContext 加载配置文件时,初始化bean对象 延迟加载,使用bean时才进行初始化
2个实现类 -> ApplicationContext (接口) -> BeanFactory (根接口)
ClassPathXmlApplicationContext
自我理解:
在用ApplicationContext 工厂类的时候,加载配置文件时,初始化bean对象,此时就已经创建了一个bean ,相当于new了一个对象在spring容器中。当我们需要用的时候
再拿出来用,类似数据库连接池。通常bean的作用域是singlegon单例的,即每次用这个bean的时候内存地址相同,用的是一个。可以设置非单例(prototype),这样每次
会创建新的bean提供使用。
- p命名空间,表达式语言(SpEL:spring Expression Language)都是为了简化配置文件
- 团队开发,避免xml混乱 <impor resource = "applicationContext.xml"/>