spring
介绍:spring是一个一栈式的分层轻量级框架,以IoC和AOP为内核.
spring是一个容器
使用基本的javabean来完成以前只能由EJB完成的工作,取代了EJB的臃肿,低效的开发模式
IoC:Inverse of Control 控制反转
创建对象的操作的权利交给spring框架来处理
实现原理:配置文件+反射+工厂模式
Class.forName("..."),通过全路径名 获取class文件
目的:解耦合
DI:dependency injection依赖注入
通过spring框架的配置文件注解来帮你对类变量赋值
AOP:Aspect Oriented Programming 面向切面编程
对于服务器的三层架构,spring对每一层都有所支持
在表示层提供了与struts2框架的整合
在业务逻辑层可以管理事务,记录日志等
在持久层可以整合hibernate,jdbcTemplate等技术
获取bean的三种方式
BeanFactory
ClassPathXMLApplicationContext
FileSystemXMLApplicationContext
spring的优点
方便解耦,简化开发
AOP编程的支持
声明式事务的支持
方便程序的测试
方便集成各种优秀框架
降低javaEE API的使用难度
spring整合jdbcTemplate
spring整合事务管理
spring框架基本组成
--core container
beans和core,提供了spring框架最基本的功能
--context,上下文对象
spel,spring提供的一个表达式语言
--DATA Access/integra
数据访问
集成
--Web
spring提供springMVC
也可以与其他的web层进行集成
--AOP
大部分情况下是使用动态代理来实现
--Test
使用spring框架方便进行测试
ApplicationContext和BeanFactory关系
ApplicationContext扩展了BeanFactory接口
BeanFactory采取延迟加载只有在getBean时才会实例化Bean
AppliCationContext它会在配置文件加载时,就会初始化Bean,
并且ApplicationContext它提供不同的应用层的Context实现。
例如在web开发中可以使用WebApplicationContext.
在开发中我们一般使用的是ApplicationContext,真正使用的是其实现类,
FileSystemXmlAppliCationContext 根据文件路径获取
ClassPathXmlApplicationContext 根据类路径获取
Bean的实例化方式
无参构造
静态工厂方法(一般不用)
实例工厂方法
在bean声明时它有一个scope属性,它是用于描述bean的作用域。
可取值有:
singleton:单例 代表在spring ioc容器中只有一个Bean实例 (默认的scope)
prototype多例 每一次从spring容器中获取时,都会返回一个新的实例
request 用在web开发中,将bean对象request.setAttribute()存储到request域中
session 用在web开发中,将bean对象session.setAttribute()存储到session域中
BeanFactory和applicationContext的区别?
BeanFactory是延迟加载
applicationContext是加载配置文件就创建对象
Bean的生命周期 (了解)
1、对bean进行实例化属性赋值
2、交给applicationContext进行管理
3、功能的扩展 (前置扩展和后置扩展)
4、自定义的初始化
5、方法的操作
6、销毁
属性注入 (掌握)
1、使用构造器注入
2、使用setter方法注入
3、使用c和p命名空间进行注入
注入的类型
1、普通类型
2、注入其他的bean ref
3、集合属性的注入 list set map props
spel表达式 #{} (掌握)
注解方式开发 (重点)
实体bean的声明
@Component 声明是一个组件
@Controller 声明是在web层实体类
@Service 声明在业务层的操作
@Repository 声明在持久化层的操作
属性注入方式
@Value进行普通值的注入
@Autowired 根据类型进行匹配
@Qualifier 根据名称进行匹配
@Resource(name="名称") 根据类型进行匹配的
名称指的是bean的id的值 如果没有设置 默认是类名 首字母小写
其他注解(了解)
@Scope设置bean的作用域
@PostConstruct 用来做初始化
@PreDestroy用来销毁的
使用spring来整合junit (了解)
1、需要在测试类上写
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
2、根据情况写测试方法
@Autowired
private IuserService userService;
@Test
public void test1(){
userService.add();
}
使用spring在web项目中使用?(重点 SSH整合之后还是这样使用的)
1、在web.xml中配置listener
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2、配置applicationContext.xml的位置
<context-param>
<param-name>contextConfigLocation</param-name><!--这是一个固定值不能修改 -->
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
bean的作用域
singleton 单例 一般情况下 springmvc框架默认是这个设置
prototype 多例 如果是和struts2整合工作中设置为prototype
request 同一个请求中
session 同一个会话中
|
|