cglib

基于注解的IoC容器

最后都变了- 提交于 2021-02-18 21:21:52
BeanFactory SpringBean的创建是典型的工厂模式,这一系列的Bean工厂,即IoC容器为开发者管理了Bean之间的依赖关系。BeanFactory作为最顶层的一个接口类,定义了IoC容器的基本规范。 在BeanFactory里只对IoC容器的基本行为做了定义,不关心Bean是如何定义及怎样加载的。正如我们只关心能从工厂中获取到什么产品,不关心工厂是怎么生产这些产品的 public interface BeanFactory { //对FactoryBean的转义定义,如果使用Bean的名字检索FactoryBean得到的对象是工厂生成的对象,如果需要得到工厂本身,需要转义 String FACTORY_BEAN_PREFIX = "&"; //根据Bean的名字获取IoC中Bean的实例 Object getBean(String var1) throws BeansException; //根据Bean的名字和Class类型获取Bean的实例,增强了类型安全验证机制 <T> T getBean(String var1, Class<T> var2) throws BeansException; Object getBean(String var1, Object... var2) throws BeansException; <T> T getBean

java基础(Reflection--反射)

纵饮孤独 提交于 2021-02-12 11:53:02
反射机制   – 指的是可以于运行时加载、探知、使用编译期间完全未知的类。   – 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,都能够知道这个类的所有属性和方法;    对于任意一个对象,都能够调用它的任意一个方法和属性;     Class c = Class.forName("com.bjsxt.test.User");   – 加载完类之后,在堆内存中,就产生了一个 Class 类型的对象(一个类只有一个 Class 对象),这个对象就包含了完整的类的结构信息。   我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。 Class类   java.lang.Class类十分特殊,用来表示java中类型(class/interface/enum/annotation/primitive type/void)本身。     – Class类的对象包含了某个被加载类的结构。一个被加载的类对应一个Class对象。     – 当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class 对象。   Class类是Reflection的根源。     – 针对任何您想动态加载、运行的类,唯有先获得相应的Class 对象  

spring的cglib代理

允我心安 提交于 2021-02-11 15:26:48
1、被代理类Person.java 1 package com.xiaostudy; 2 3 /** 4 * @desc 被代理类 5 * 6 * @author xiaostudy 7 * 8 */ 9 public class Person { 10 11 public void add() { 12 System.out.println("add()>>>>>>>>" ); 13 } 14 15 public void update() { 16 System.out.println("update()>>>>>>>>" ); 17 } 18 19 public void delete() { 20 System.out.println("delete()>>>>>>>>" ); 21 } 22 23 } 2、切面类MyAdvice.java 1 package com.xiaostudy; 2 3 /** 4 * @desc 切面类 5 * 6 * @author xiaostudy 7 * 8 */ 9 public class MyAdvice { 10 11 /** 12 * @desc 植入代理方法的方法 13 */ 14 public void before() { 15 System.out.println("日记开始>>>>>>>>>>>" ); 16 }

Spring AOP原理(续)

南楼画角 提交于 2021-02-10 07:58:30
十二、AOP 1. 说出Spring的通知类型有哪些? spring共提供了五种类型的通知: 通知类型 接口 描述 Around 环绕通知 org.aopalliance.intercept.MethodInterceptor 拦截对目标方法调用 Before 前置通知 org.springframework.aop.MethodBeforeAdvice 在目标方法调用前调用 After 后置通知 org.springframework.aop.AfterReturningAdvice 在目标方法调用后调用 Throws 异常通知 org.springframework.aop.ThrowsAdvice 当目标方法抛出异常时调用 前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。 正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。 异常返回通知[After throwing advice]:在连接点抛出异常后执行。 返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。 环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后

java 面试题

纵然是瞬间 提交于 2021-02-10 02:44:02
1.hashmap、concurrenthashmap底层实现和区别 hashmap是基于数组+ 链表结构的,数组下标有hash生成,链表主要是为了防止hash冲突,即使两个对象的hashCode一样,它们会放到当前数组索引位置的链表中,Java8后链表长度大于8就会转为红黑树, 主要是为了提高查找效率,链表查找慢,增删改快 区别:hashmap是线程不安全的,ConcurrentHashMap是线程安全的,把数据分成了不同的段,使用的分段锁技术,通过hash计算那些数据放在那个段中,查找也是如此 2.spring框架的原理 spring框架主要是用来创建、注册、配置、管理、维护bean的容器,主要是利用Java反射技术动态维护、调用对象,主要包括控制反转(IOC)以及面向切面(AOP),三种注入方式分别是Field注入 (使用@Autowired或@Resource注入)、构造器注入和Setter方法注入 3.如何写一个orm框架 对象-关系映射(Object-Relational Mapping,简称ORM),处理对象与数据库交互的,常见的有hibernate、jpa、ibatis等 4.hibernate一级缓存和二级缓存,hibernate其他缓存 hibernate缓存分为三种:一级缓存,二级缓存和查询缓存, session内的缓存即一级缓存,不能被清除

Spring + lombok + @SneakyThrows

倖福魔咒の 提交于 2021-02-07 06:13:01
问题 I'm using @SneakyThrows Lombok feature in my SpringBoot project. I have problems with this feature when CGLIB proxies implementation it throws java.lang.Exception: Unexpected exception, expected but was<java.lang.reflect.UndeclaredThrowableException> . Can it be fixed somehow ? Providing examples. There is interface and two implementations. public interface SneakyThrowsExample { void testSneakyThrows(); } Simple implementation import lombok.SneakyThrows; import org.springframework.stereotype

Spring + lombok + @SneakyThrows

亡梦爱人 提交于 2021-02-07 06:12:26
问题 I'm using @SneakyThrows Lombok feature in my SpringBoot project. I have problems with this feature when CGLIB proxies implementation it throws java.lang.Exception: Unexpected exception, expected but was<java.lang.reflect.UndeclaredThrowableException> . Can it be fixed somehow ? Providing examples. There is interface and two implementations. public interface SneakyThrowsExample { void testSneakyThrows(); } Simple implementation import lombok.SneakyThrows; import org.springframework.stereotype

Spring + lombok + @SneakyThrows

血红的双手。 提交于 2021-02-07 06:11:22
问题 I'm using @SneakyThrows Lombok feature in my SpringBoot project. I have problems with this feature when CGLIB proxies implementation it throws java.lang.Exception: Unexpected exception, expected but was<java.lang.reflect.UndeclaredThrowableException> . Can it be fixed somehow ? Providing examples. There is interface and two implementations. public interface SneakyThrowsExample { void testSneakyThrows(); } Simple implementation import lombok.SneakyThrows; import org.springframework.stereotype

Spring + lombok + @SneakyThrows

白昼怎懂夜的黑 提交于 2021-02-07 06:10:28
问题 I'm using @SneakyThrows Lombok feature in my SpringBoot project. I have problems with this feature when CGLIB proxies implementation it throws java.lang.Exception: Unexpected exception, expected but was<java.lang.reflect.UndeclaredThrowableException> . Can it be fixed somehow ? Providing examples. There is interface and two implementations. public interface SneakyThrowsExample { void testSneakyThrows(); } Simple implementation import lombok.SneakyThrows; import org.springframework.stereotype

2年java,蚂蚁一面,卒

喜你入骨 提交于 2021-02-06 08:40:14
作为程序员,我也希望做一枚运营狗。可惜并没多少时间,所以每到过节都发水文。端午快乐。 本文原于掘金试水,加个反差的标题,与预期一致,我也明白了为什么某些公众号质量和流行度相悖。事实就是这样,价值大的文章,都是那么小众。反而是这种初级的随手写的小东西,更加受欢迎。但这种文章如果你喜欢,我会觉得特别悲伤。 因为, 你正在为了面试而迎合面试官,而不是为了工作而汲取知识 。 正文如下,如有雷同,纯属巧合。 其实我一个都没答上来。并不是因为我笨,是因为我不会。在大佬的帮助下,现在我会了,求求你再给我一个机会。 TreeSet/HashSet 区别 顾名思义,首先是结构上的不同 1、TreeSet背后的结构是TreeMap,也就是红黑树,能够实现自动排序。它通过equals方法或者compareTo方法进行内容的比较。 2、HashSet背后是HashMap,key是无序的,只能做外部排序。既然是Hash,那么就要重写其中对象的hashCode和equals方法 另外,还有个细微的差别可以拿来装b: 1、HashSet可以接受null值,有且只有一个 2、TreeSet默认不可以接受null值,会直接抛出空指针异常 set里没有重复数据,treeSet里连虚无都没有。 HashMap 如何解决冲突,扩容机制 烂大街的问题,问哪答哪吧。这样的东西就是靠背。 HashMap的内部结构其实是数组