Spring Bean在使用之前或使用之后需要做一些操作,Spring对Bean
的生命周期的操作提供了支持。
Spring Bean在使用之前或使用之后需要做一些操作,Spring对Bean
的生命周期的操作提供了支持。
类加载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。
类加载工作由ClassLoader
及其子类负责。ClassLoader
是一个重要的Java
运行时系统组件,它负责在运行时查找和装入Class
字节码文件。
设计模式(四):代理模式之CGLIB动态代理(CGLIB Dynamic Proxy)
基于静态代理和动态代理需要绑定接口的局限性,而对类的代理在某些场景下确实是需要的,所以某些大牛就创造了CGLIB
这个动态代理类库。
CGLIB
底层是基本ASM
字节码处理框架,该库允许在程运行时对字节码进行修改和动态生成新的类。
CGLIB
所创建的动态代理对象的性能比JDK
所创建的动态代理对象的性能高(大概10倍),但CGLIB
在创建代理对象时所花费的时间却比JDK
动态代理多(大概8倍)。
对于singleton
的代理对象或者具有实例池的代理,因无须频繁创建对象,比较适用CGLIB
动态代理技术;反之则适合采用JDK
动态代理技术。
设计模式(三):代理模式之JDK动态代理(JDK Dynamic Proxy)
JDK 1.3 版本后,Java提供了动态代理技术,允许应用在运行期创建接口的代理对象。
JDK 提供的代理只能针对接口做代理。也有更强大的代理库 cglib
,可以实现对类的代理。
JDK 的 java.lang.reflect
包下提供了一个Proxy
类和一个InvocationHandler
接口,Proxy
类利用InvocationHandler
动态创建一个符合某一接口的代理,生成(运行时)目标类的代理对象。
在普通编程过程中,无须使用动态代理,但在编写框架或底层基础代码时,动态代理的作用就非常大。
设计模式(二):代理模式之静态代理(Static Proxy)
静态代理在使用时,需要定义接口
或者父类
,目标对象与代理对象一起实现相同的接口
或者是继承相同父类
。
代理对象通过调用代理对象的方法来调用目标对象的方法;可以在不修改目标对象的前提下,对目标对象的功能进行扩展。
Spring(六): Spring Aware 通过 Bean 获取容器的服务
项目中,当需要用到Spring容器本身的功能资源时,Bean就需要知道容器的存在,才能调用 Spring 所提供的资源,而 Spring Aware就是提供这样的功能,原本也是给 Spring 框架内部使用的。
Spring Aware 的目的就是为了让 Bean 获取容器的服务。ApplicationContext
接口集成了MessageSource
接口,ApplicationEventPublisher
接口和ResourceLoader
接口,如果让 Bean 继承 ApplicationContextAware
可以获得 Spring 容器的所有服务,但原则上有用到什么接口,再实现该接口。
JSP 页面中经常用到EL
表达式和JSTL
标签库。
EL
表达式主要作用:获取数据,执行运算,获取Web常用隐式对象。
EL
表达式以${}
结构表示;取值从左到右,如果需要文件${
,在前面加转义符\${
。
四大作用域的作用是为了实现页面和服务器共享数据。
page
:设置的属性令在当前页面有效。实际开发中较少使用,作用域太小了。request
:属性仅在本次请求有效。session
:令在浏览器和服务进行本次会话有效,当和服务器断开后,属性失效。application
:属性在整个WEB应用中都有效,直到服务器停止才失效。实际开发中几乎不使用,作用域太大了。 四大作用域分别都有设置和获取属性的两个方法:setAttribute()
、getAttribute()
业务实践系列(1):ID号(订单ID,用户ID)设计思路分析
项目中对订单号进行重新设计,参考了网上的方案加上自己的思路,根据不同的业务场景进行分析。
MyBatis 的强大特性之一便是它的动态 SQL,Mybatis 在对 SQL 语句进行预编译之前,会对 SQL 进行动态解析,解析为一个 BoundSql 对象,同时对动态 SQL 进行处理。
动态 SQL 主要通过OGNL
表达式实现 SQL 可以动态判断和选择参数。