spring
mischen520
JAVA高级架构师
展开
-
Spring中,ApplicationContext主要的实现类型包括?
ClassPathXmlApplicationContext:类似于FileSystemXmlApplicationContext,也是从一个XML文件中加载beans的定义,但它是从类路径(classpath)中查找并加载配置文件,适用于将配置文件放在类路径下的情况。XmlWebApplicationContext:专门为Web工程定制的实现,允许在web.xml中配置上下文,通常与Spring MVC集成,用于加载控制器和其他Web相关的组件,适用于Web应用程序。原创 2024-08-02 18:59:31 · 315 阅读 · 0 评论 -
Spring配置bean元数据的方式包括?
2.注解配置:使用Spring提供的注解,如@Component, @Service, @Repository, @Controller等来定义bean。3.Java配置:通过Java类配置bean,使用@Configuration和@Bean注解。4.Groovy配置:使用Groovy DSL配置bean。5.基于Groovy Bean DSL的配置。1.XML配置:通过XML文件定义bean。Spring配置bean元数据的方式包括?原创 2024-08-02 18:55:40 · 95 阅读 · 0 评论 -
Spring有5种自动装配方式,其中autodetect默认使用?
constructor:通过构造函数自动装配。Spring容器会查找和需要自动装配的构造函数参数类型相同的bean,并用它们来注入。autodetect:Spring首先会尝试通过构造函数自动装配,如果无法实现,则会尝试通过byType自动装配。byType:通过属性类型自动装配。Spring容器中会查找和需要自动装配的属性类型相同的bean,并将其注入。Spring容器中会查找和需要自动装配的属性名相同的bean,并将其注入。Spring框架提供了5种自动装配模式,主要是用在依赖注入的场景中。原创 2024-08-02 18:44:28 · 333 阅读 · 0 评论 -
spring事务什么时候会失效?
spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不起作用了!常见情况有如下几种1、发生自调用,类里面使用this调用本类的方法(this通常省略),此时这个this对象不是代理类,而是UserService对象本身!解决方法很简单,让那个this变成UserService的代理类即可!2、方法不是public的3、数据库不支持事务4、没有被spring管理5、异常被吃掉,事务不会回滚(或者抛出的异常没有被定义,默认为RuntimeException)...原创 2022-07-09 07:42:53 · 227 阅读 · 0 评论 -
Spring框架中的单例Bean是线程安全的么?
Spring中的Bean默认是单例模式的,框架并没有对bean进行多线程的封装处理。如果Bean是有状态的 那就需要开发人员自己来进行线程安全的保证,最简单的办法就是改变bean的作用域 把 "singleton"改为’‘prototype’ 这样每次请求Bean就相当于是 new Bean() 这样就可以保证线程的安全了。有状态就是有数据存储功能无状态就是不会保存数据 controller、service和dao层本身并不是线程安全的,只是如果只是调用里面的方法,而且多线程调用一个实例的方法,会在原创 2022-07-09 07:34:34 · 265 阅读 · 0 评论 -
Aspect切面类的实际应用
切面,面向切面编程原创 2022-06-02 21:03:40 · 776 阅读 · 0 评论 -
webx与springmvc框架对比?
(1)基础服务支持:因为webx在阿里巴巴和淘宝使用了很多年,对于超大访问量的电子商务网站,webx经受了考验,被证明是成熟可靠的。(2)多应用支持:webx和springmvc一样,完全建立在spring框架之上,可以使用spring的所有特性。webx被设计成多个层次,层次间的分界线很清晰,每个层次都足够开放和易于扩展。(3)可扩展性:webx对spring做了扩展,一个组件可以扩展另一个组件,也可以被其他组件扩展。这种机制使webx具有较好的扩展性。且比未经扩展的spring更易使用。...原创 2022-03-24 08:45:03 · 841 阅读 · 0 评论 -
BeanFactory和ApplicationContext有什么区别?
ApplicationContext是BeanFactory的子接口ApplicationContext提供了更完整的功能:①继承MessageSource,因此支持国际化。②统一的资源文件访问方式。③提供在监听器中注册bean的事件。④同时加载多个配置文件。⑤载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例原创 2021-10-26 06:22:01 · 202 阅读 · 0 评论 -
Spring AOP 的实现原理
Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和 CGLIB 动态代理。JDK 动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK 动态代理的核心是 InvocationHandler 接口和 Proxy 类。如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB 是通过继承的.原创 2021-10-22 07:02:55 · 185 阅读 · 0 评论 -
Spring支持几种bean的作用域?
singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。该对象的生命周期是与Spring IOC容器一致的(但在第一次被注入时才会创建)。prototype:为每一个bean请求提供一个实例。在每次注入时都会创建一个新的对象request:bean被定义为在每个HTTP请求中创建一个单例对象,也就是说在单个请求中都会复用这一个单例对象。session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,b原创 2021-10-22 06:34:02 · 156 阅读 · 0 评论 -
spring是怎么解决循环依赖的?
Spring创建bean主要分为两个步骤,创建原始bean对象,接着去填充对象属性和初始化,每次创建bean之前,我们都会从缓存中查下有没有该bean,因为是单例,只能有一个,当我们创建beanA的原始对象后,并把它放到三级缓存中,接下来就该填充对象属性了,这是时候发现依赖了beanB,接着就又去创建beanB,同样的流程,创建完beanB填充属性时又发现他依赖了beanA又是同样的流程,不同的是,这时候可以在三级缓存中查到刚放进去的原始对象beanA,所以不需要继续创建,用它注入beanB,完成beanB原创 2021-10-20 20:18:18 · 160 阅读 · 0 评论 -
spring事务传播机制
多个事务方法相互调用时,事务如何在这些方法间传播方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有无事务以及方法B对事务的要求不同都会对方法A的事务具体执行造成影响,同时方法A的事务对方法B的事务执行也有影响,这种影响具体是什么就由两个方法所定义的事务传播类型所决定。REQUIRED(Spring默认的事务传播类型):如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行MANDATO原创 2021-10-16 05:18:31 · 151 阅读 · 0 评论 -
Spring Bean的生命周期?
1、解析类得到BeanDefinition2、如果有多个构造方法,则要推断构造方法3、确定好构造方法后,进行实例化得到一个对象4、对对象中的加了@Autowired注解的属性进行属性填充5、回调Aware方法,比如BeanNameAware,BeanFactoryAware6、调用BeanPostProcessor的初始化前的方法7、调用初始化方法8、调用BeanPostProcessor的初始化后的方法,在这里会进行AOP9、如果当前创建的bean是单例的则会把bean放入单例池10、使原创 2021-10-03 07:06:27 · 92 阅读 · 0 评论 -
谈谈你对AOP的理解
系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中原创 2021-10-02 04:16:25 · 174 阅读 · 0 评论 -
Spring框架中用到了哪些设计模式(最全面的面试答案)
1.简单工厂:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。2.工厂方法:实现了FactoryBean接口的bean是一类叫做factory的bean。其特点是,spring会在使用getBean()调用获得该bean时,会自动调用该bean的getObject()方法,所以返回的不是factory这个bean,而是这个原创 2021-10-01 07:06:51 · 545 阅读 · 0 评论 -
Spring的七个事务传播行为
Spring在TransactionDefinition接口中定义这些属性在TransactionDefinition接口中定义了五个不同的事务隔离级别ISOLATION_DEFAULT这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应ISOLATION_READ_UNCOMMITTED这是事...转载 2019-05-30 16:53:45 · 318 阅读 · 0 评论 -
动态代理举例及详细解析
动态代理, 1)代理对象,不需要实现接口; 2)代理对象的生成,是利用JDKAPI, 动态的在内存中构建代理对象(需要我们指定创建 代理对象/目标对象 实现的接口的类型;); 3) 动态代理, JDK代理, 接口代理; JDK中生成代理对象的API:|-- Proxy staticObject newPr原创 2016-08-15 14:01:03 · 899 阅读 · 0 评论 -
静态代理举例及详细解析
静态代理, 1) 代理对象,要实现与目标对象一样的接口; 2) 举例: 保存用户(模拟) Dao , 直接保存 DaoProxy,给保存方法添加事原创 2016-08-15 09:02:39 · 1327 阅读 · 0 评论 -
IOC容器注解方式详细解析
注解方式可以简化spring的IOC容器的配置! 使用注解步骤: 1)先引入context名称空间 xmlns:context="http://www.springframework.org/schema/context" 2)开启注解扫描 3)使用原创 2016-08-14 16:56:50 · 2432 阅读 · 0 评论 -
第一个spring写的helloworld,好多细节
首先正确的加入组件springsource-tool-suite-3.7.3.RELEASE-e4.5.2-updatesite,然后再在eclipse中加入5个必须的jar包,分别是:commons-logging-1.2.jarspring-beans-4.3.0.RELEASE.jarspring-context-4.3.0.RELEASE.jarspring-core-4.原创 2016-06-26 19:58:12 · 748 阅读 · 2 评论 -
Spring Bean的作用域之间有什么区别?
Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:1. singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。2. prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例原创 2016-07-31 10:01:57 · 3405 阅读 · 0 评论 -
Spring框架中的单例Beans是线程安全的么?
Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。最浅显的解决办法就是将多态原创 2016-07-31 10:04:45 · 2215 阅读 · 0 评论 -
请解释自动装配模式的区别?
在Spring框架中共有5种自动装配:1. no:这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。2. byName:该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找原创 2016-07-31 10:08:50 · 1787 阅读 · 1 评论 -
Cglib子类代理及详细解析
Cglib代理,也叫做子类代理。在内存中构建一个子类对象从而实现对目标对象功能的扩展。 l JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的类,就可以使用CGLIB实现。l CGLIB是一个强大的高性能的代码生成包,它可以在运行期扩展Java类与实现Java接口。它广泛的被许多AOP的框架使用,例如Spring AOP和dyna原创 2016-08-15 20:20:49 · 1530 阅读 · 1 评论 -
手动实现AOP编程
AOP 面向切面的编程, AOP可以实现“业务代码”与“关注点代码”分离// 保存一个用户public void add(User user) { Session session = null; Transaction trans = null; try { session = HibernateSessionFactoryUtils.getSe原创 2016-08-15 21:14:04 · 743 阅读 · 0 评论 -
AOP编程+动态代理
下面是一个简单的例子1.IUserDaopackage cn.itcast.d_myaop1;//接口public interface IUserDao { void save(); }2.UserDaopackage cn.itcast.d_myaop1;import org.springframework.stereotype.Component;@Com原创 2016-08-15 21:52:14 · 228 阅读 · 0 评论 -
注解方式实现AOP编程
步骤:1) 先引入aop相关jar文件 (aspectj aop优秀组件) spring-aop-3.2.5.RELEASE.jar 【spring3.2源码】aopalliance.jar 【sprin原创 2016-08-16 08:03:08 · 607 阅读 · 0 评论 -
XML方式实现AOP编程
Xml实现aop编程: 1) 引入jar文件 【aop 相关jar, 4个】 2) 引入aop名称空间 3)aop 配置 *配置切面类 (重复执行代码形成的类) *aop配置 拦截哪些方法 / 拦截到原创 2016-08-16 11:37:18 · 259 阅读 · 0 评论 -
spring中JDBC的应用
下面以一个具体的代码来说明spring中jdbc的应用1.Deptpackage cn.itcast.h_jdbc;public class Dept{ private int deptId; private String deptName; public int getDeptId() { return deptId; } public void setDeptI原创 2016-08-16 18:18:39 · 349 阅读 · 0 评论 -
spring声明式事物管理配置和对c3p0连接池的详细配置
直接上配置代码:<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://原创 2016-08-16 22:25:07 · 2823 阅读 · 0 评论 -
spring+hibernate整合详细步骤解析
Spring与Hibernate整合关键点: 1) Hibernate的SessionFactory对象交给Spring创建; 2) hibernate事务交给spring的声明式事务管理。SH整合步骤: 1)引入jar包 连接池/数据库驱动包原创 2016-08-17 11:58:55 · 1715 阅读 · 0 评论 -
spring框架开发步骤详细解析
spring各个版本中: 在3.0以下的版本,源码有spring中相关的所有包【spring功能 + 依赖包】 如2.5版本; 在3.0以上的版本,源码中只有spring的核心功能包【没有依赖包】 (如果要用依赖包,需要单独下载!) 1) 源码, jar文件:spr原创 2016-08-14 09:18:16 · 2943 阅读 · 0 评论 -
spring中bean创建的细节
1) 对象创建:单例/多例 * scope="singleton", 默认值,即默认是单例 【service/dao/工具类】 * scope="prototype", 多例; 【Action对象】 * * 2) 什么时候创建? * scope="prototype" 在用到对原创 2016-08-14 10:34:05 · 296 阅读 · 0 评论 -
IOC容器,创建对象详细解析
下面模仿一个具体的实例来说明问题,1.bean.xml<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/s原创 2016-08-14 11:45:32 · 2326 阅读 · 0 评论 -
Spring中,如何给对象的属性赋值?
1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间 4)自动装配(了解) 5)注解 下面是bean.xml文件中的关键代码<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="原创 2016-08-14 15:01:17 · 3517 阅读 · 0 评论 -
springsource-tool-suite-update 最新各个版本下载地址(福利)
springsource-tool-suite-update 最新各个版本下载地址(福利)在网上找了三个小时才找到了,现在把这个地址跟大家一起分享https://spring.io/tools/sts/all原创 2016-06-26 15:28:45 · 14555 阅读 · 11 评论