标签:hibernate 分享 对象创建 面向切面编程 调度 private javaee 算数 i18n
1. Spring的概述
Spring是分层的、JavaSE/EE一站式(full-stack)、轻量级开源框架。
1.1 JavaEE分层
JavaEE规范的三层结构体系:
表现层(页面数据显示、页面跳转调度),例如jsp/servlet
业务层(业务处理和功能逻辑、事务控制),例如service
持久层(数据存取和封装、和数据库打交道),例如dao
1.2 一站式
Spring提供了JavaEE各层的解决方案:
表现层:struts1、struts2、Spring MVC
业务层:Ioc、AOP、事务控制
持久层:JdbcTemplate、HibernateTemplate、ORM框架(对象关系映射)整合
1.3 轻量级
Spring的出现取代了EJB的臃肿、低效、繁琐复杂、脱离现实的情况. 而且使用spring编程是非侵入式的。
2. Spring的体系结构
pring框架是一个分层架构,它包含一系列的功能要素并被分为大约20个模块。这些模块分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和测试部分,如图:
这里简单的说一下core container 模块:
1:Core和Beans模块提供了Spring最基础的功能,提供IoC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
2:Context模块基于Core和Beans来构建,它提供了用一种框架风格的方式来访问对象,有些像JNDI注册表。Context封装包继承了beans包的功能,还增加了国际化(I18N),事件传播,资源装载,以及透明创建上下文,例如通过servlet容器,以及对大量JavaEE特性的支持,如EJB、JMX。核心接口是ApplicationContext。
3:Expression Language,表达式语言模块,提供了在运行期间查询和操作对象图的强大能力。支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring 容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。
其他的比如 Web模块主要是对表现层的一些框架或者技术的集成,而Test模块则提供对使用JUnit和TestNG来测试Spring组件的支持。
3. Spring的核心
Spring用的最多或者最核心的概念就是:
IoC(Inverse of Control 控制反转): 将对象创建权利交给Spring工厂进行管理。
AOP(Aspect Oriented Programming 面向切面编程),基于动态代理的功能增强方式。
3.1 IoC控制反转
简单的说就是引入工厂(第三者),将原来在程序中手动创建管理的依赖的对象,交给工厂来创建管理。很早以前流行的是配置xml文件,所以IoC底层就是:工厂(设计模式)+反射(机制) + 配置文件/注解。(现在基本都用注解注入Spring,xml配置文件的方式不在再总结)。
开启注解和注解bean的扫描需要在Spring核心配置文件 applicaContext.xml中配置:
<!-- 开启spring的注解功能 :让注解有效了,识别注解。可以省略,因为下面的扫描包的配置包含开启注解功能-->
<context:annotation-config/> <!-- 配置注解扫描 context:component-scan:专门扫描含有@Component注解的类,自动将其作为bean base-package:要扫描包的路径,包含子包,表示子包下的所有类定义注解都有效 注解扫描配置的时候,会自动开启注解功能 --> <context:component-scan base-package="com.xxx.spring"/>
几个比较常用的注解:
@Service用于标注业务层组件、(如Service层)
@Controller用于标注控制层组件(如struts中的action层)
@Repository用于标注数据访问组件,(如DAO层组件)。
而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
3.2 依赖注入DI
Dependency Injection 依赖注入,简单的说,可以将另外一个bean对象动态的注入到另外一个bean中。
简单的依赖注入,我们可以通过@Value注解来实现。
@Value("Rose")//参数的值简单类型 private String name="Jack";
或者结合SpEL
@Value("#{server.port}") private String port;
复杂的依赖注入,我们可以通过@Autowired 、
@Autowired//默认按照类型注入 private CustomerDao customerDao;
单独使用@Autowired ,表示按照类型注入,会到spring容器中查找CustomerDao的类型。
@Autowired public void aaa(CustomerDao customerDao){ this.customerDao = customerDao; }
也可以用在方法上通过形参注入。
3.3 其他的一些注解
使用 @PostConstruct 注解, 标明初始化方法 ---相当于 init-method 指定初始化方法
使用 @PreDestroy 注解, 标明销毁方法 ----相当于 destroy-method 指定对象销毁方法
如果要执行对象的销毁方法,
条件一: 单例Bean (在容器close时,单例Bean才会执行销毁方法 )
条件二: 必须调用容器 close 方法
使用 @Scope注解,指定Bean的作用域(默认是 singleton 单例)
@Scope("prototype")//默认是单例(singleton),更改为多例(prototype) public class Abc{ }
标签:hibernate 分享 对象创建 面向切面编程 调度 private javaee 算数 i18n
原文地址:https://www.cnblogs.com/ansoncong/p/10311890.html