1.Spring的生命周期 1.1)在配置元素,通过init-method指定Bean的初始化方法,通过destroy-method指定Bean销毁方法class= "cn.itcast.spring.d_lifecycle.lifecyclebean" init-method= "setup" destroy-method= "teardown">
需要注意的问题:
destroy-method只对scope="singleton"有效 销毁方法,必须关闭ApplicationContext对象(手动调用),才会被调用 ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); applicationContext.close();
2)Bean的完整生命周期(十一步骤)【了解内容,但是对于spring内部操作理解有一定帮助】 ①、instantiatebean对象实例化 ②、populateproperties封装属性 ③、如果Bean实现BeanNameAware执行setBeanName ④、如果Bean实现BeanFactoryAware或者ApplicationContextAware设置工厂setBeanFactory或者上下文对象setApplicationContext ⑤、如果存在类实现BeanPostProcessor(后处理Bean),执行postProcessBeforeInitialization,BeanPostProcessor接口提供钩子函数,用来动态扩展修改Bean。(程序自动调用后处理Bean)
注意:这个前处理Bean和后处理Bean会对所有的Bean进行拦截。 ⑥如果Bean实现InitializingBean执行afterPropertiesSet ⑦调用指定初始化方法init ⑧如果存在类实现BeanPostProcessor(处理Bean),执行postProcessAfterInitialization ⑨执行业务处理 ⑩如果Bean实现DisposableBean执行destroy ⑪调用指定销毁方法customerDestroy 2.请介绍一下Spring框架中Bean的生命周期和作用域 (1)bean定义 1.在配置文件里面用 来进行定义。 (2)bean初始化 1.有两种方式初始化: A.在配置文件中通过指定init-method属性来完成 B.实现org.springframwork.beans.factory.InitializingBean接口 (3)bean调用 1.有三种方式可以得到bean实例,并进行调用 (4)bean销毁 1.销毁有两种方式 A.使用配置文件指定的destroy-method属性 B.实现org.springframwork.bean.factory.DisposeableBean接口
3.作用域 singleton 当一个bean的作用域为singleton,那么SpringIoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。 prototype Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域request 在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的SpringApplicationContext情形下有效。 session 在一个HTTPSession中,一个bean定义对应一个实例。该作用域仅在基于web的SpringApplicationContext情形下有效。 globalsession 在一个全局的HTTPSession中,一个bean定义对应一个实例。典型情况下,仅在使用portletcontext的时候有效。该作用域仅在基于web的SpringApplicationContext情形下有效。 4.Bean注入属性有哪几种方式? spring支持构造器注入和setter方法注入构造器注入,通过元素完成注入setter方法注入,通过元素完成注入【开发中常用方式】 5.什么是AOP,AOP的作用是什么? 面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足,除了类(classes)以外,AOP提供了切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理Spring的一个关键的组件就是AOP框架,可以自由选择是否使用AOP提供声明式企业服务,特别是为了替代EJB声明式服务。最重要的服务是声明性事务管理,这个服务建立在Spring的抽象事物管理之上。允许用户实现自定义切面,用AOP来完善OOP的使用,可以把SpringAOP看作是对Spring的一种增强 6.Spring的核心类有哪些,各有什么作用? ·BeanFactory:产生一个新的实例,可以实现单例模式 ·BeanWrapper:提供统一的get及set方法 ·ApplicationContext:提供框架的实现,包括BeanFactory的所有功能 7.Spring里面如何配置数据库驱动? 使用”org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。示例如下:
org.hsqldb.jdbcDriverjdbc:hsqldb:db/appfuseabcabc
8.Spring里面applicationContext.xml文件能不能改成其他文件名? ContextLoaderListener是一个ServletContextListener,它在你的web应用启动的时候初始化。缺省情况下,它会在WEB-INF/applicationContext.xml文件找Spring的配置。你可以通过定义一个元素名字为”contextConfigLocation”来改变Spring配置文件的位置。示例如下:
org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/xyz.xml
9.Spring里面如何定义hibernatemapping? 添加hibernatemapping文件到web/WEB-INF目录下的applicationContext.xml文件里面。示例如下:
org/appfuse/model/User.hbm.xml
10.Spring如何处理线程并发问题? ·Spring使用ThreadLocal解决线程安全问题 ·我们知道在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域。就是因为Spring对一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)中非线程安全状态采用ThreadLocal进行处理,让它们也成为线程安全的状态,因为有状态的Bean就可以在多线程中共享了。 ·ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。 ·在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。 ·而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。 ·由于ThreadLocal中可以持有任何类型的对象,低版本JDK所提供的get()返回的是Object对象,需要强制类型转换。但JDK5.0通过泛型很好的解决了这个问题,在一定程度地简化ThreadLocal的使用。 ·概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
11.介绍一下Spring的事物管理 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。 开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。spring提供了几个关于事务处理的类: ·TransactionDefinition//事务属性定义 ·TranscationStatus//代表了当前的事务,可以提交,回滚。 ·PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。 一般事务定义步骤:
TransactionDefinitiontd= new TransactionDefinition(); TransactionStatusts=transaction Manager.getTransaction(td); try{
//dosth
transactionManager.commit(ts);
} catch(Exceptione){
transactionManager.rollback(ts);
}
spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。 编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象. voidadd(){
transactionTemplate.execute( newTransaction Callback(){ pulic Object doInTransaction(TransactionStatusts){
//dosth
}
}
}
声明式: 使用 TransactionProxyFactoryBean:PROPAGATIONREQUIREDPROPAGATIONREQUIRED PROPAGATION_REQUIRED,readOnly围绕Poxy的动态代理能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
12.解释一下SpringAOP里面的几个名词 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在 SpringAOP中,切面可以使用通用类(基于模式的风格)或者在普通类中以@Aspect注解(@AspectJ风格)来实现。 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在SpringAOP中,一个连接点总是代表一个方法的执行。通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。 通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。通知的类型将在后面部分进行讨论。许多AOP框架,包括Spring,都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。 切入点(Pointcut):匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。 引入(Introduction):(也被称为内部类型声明(inter-typedeclaration))。声明额外的方法或者某个类型的字段。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现IsModified接口,以便简化缓存机制。 目标对象(TargetObject):被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做被通知(advised)对象。既然SpringAOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。 AOP代理(AOPProxy):AOP框架创建的对象,用来实现切面契约(aspectcontract)(包括通知方法执行等功能)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。注意:Spring2.0最新引入的基于模式(schema-based)风格和@AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。 织入(Weaving):把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。Spring和其他纯JavaAOP框架一样,在运行时完成织入。
13.通知有哪些类型? 前置通知(Beforeadvice):在某连接点(joinpoint)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。返回后通知(Afterreturningadvice):在某连接点(joinpoint)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。抛出异常后通知(Afterthrowingadvice):在方法抛出异常退出时执行的通知。后通知(After(finally)advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。环绕通知(AroundAdvice):包围一个连接点(joinpoint)的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。切入点(pointcut)和连接点(joinpoint)匹配的概念是AOP的关键,这使得AOP不同于其它仅仅提供拦截功能的旧技术。切入点使得定位通知(advice)可独立于OO层次。例如,一个提供声明式事务管理的around通知可以被应用到一组横跨多个对象中的方法上(例如服务层的所有业务操作)。
14、什么是 Spring 框架?Spring 框架有哪些主要模块? Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。 Spring 框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成 Spring 框架,不必担心 Spring 是如何在后台进行工作的。 Spring 框架至今已集成了 20 多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。
15、使用 Spring 框架能带来哪些好处? 下面列举了一些使用 Spring 框架带来的主要好处: · Dependency Injection(DI) 方法使得构造器和 JavaBean properties 文件中的依赖关系一目了然。 · 与 EJB 容器相比较,IoC 容器更加趋向于轻量级。这样一来IoC 容器在有限的内存和 CPU 资源的情况下进行应用程序的开发和发布就变得十分有利。 · Spring 并没有闭门造车,Spring 利用了已有的技术比如ORM 框架、logging 框架、J2EE、Quartz 和 JDK Timer,以及其他视图技术。 · Spring 框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。 · 要测试一项用 Spring 开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean 形式的 POJO 类,可以很方便的利用依赖注入来写入测试数据。 · Spring 的 Web 框架亦是一个精心设计的 Web MVC 框架,为开发者们在 web 框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行 web 框架的以外的有力选项。 · Spring 提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单 DB 的环境下)和复杂的共同事物处理(比如利用 JTA 的复杂 DB 环境)。
16、Spring 框架中都用到了哪些设计模式? Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的:
代理模式—在 AOP 和 remoting 中被用的比较多。
单例模式—在 spring 配置文件中定义的 bean 默认为单例模式。
模板方法—用来解决代码重复的问题。比如. RestTemplate,JmsTemplate, JpaTemplate。
前端控制器—Spring 提供了 DispatcherServlet 来对请求进行分发。
视图帮助(View Helper )—Spring 提供了一系列的 JSP 标签,高效宏来辅助将分散的代码整合在视图里。
依赖注入—贯穿于 BeanFactory / ApplicationContext 接口的核心理念。
工厂模式—BeanFactory 用来创建对象的实例。
17、请解释下 Spring 框架中的 IoC? · Spring 中的 org.springframework.beans 包和org.springframework.context 包构成了 Spring 框架 IoC 容器的基础。 · BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex 接口对BeanFactory(是一个子接口)进行了扩展,在 BeanFactory的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource 的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的 WebApplicationContext。 · org.springframework.beans.factory.BeanFactory 是Spring IoC 容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory 接口是 Spring IoC 容器的核心接口。
18、什么是控制反转(IOC)?什么是依赖注入? · 控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。 · 控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。 · 依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件? 在 Java 中依然注入有以下三种实现方式:
构造器注入
Setter 方法注入
接口注入
19、BeanFactory 和 ApplicationContext 有什么区别? · BeanFactory 可以理解为含有 bean 集合的工厂类。 BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。 · BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含了 bean 生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。 · 从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设置,根据请求分发 bean 的功能。但 application context 在此基础上还提供了其他的功能。
提供了支持国际化的文本消息
统一的资源文件读取方式
已在监听器中注册的 bean 的事件 以下是三种较常见的ApplicationContext 实现方式:
1、ClassPathXmlApplicationContext:从 classpath 的XML 配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中取得。 ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”); 2、FileSystemXmlApplicationContext :由文件系统中的XML 配置文件读取上下文。 ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”); 3、XmlWebApplicationContext:由 Web 应用的 XML 文件读取上下文。
20、如何用基于 XML 配置的方式配置 Spring? · 在 Spring 框架中,依赖和服务需要在专门的配置文件来实现,我常用的 XML 格式的配置文件。这些配置文件的格式通常用开头,然后一系列的 bean 定义和专门的应用配置选项组成。 · SpringXML 配置的主要目的时候是使所有的 Spring 组件都可以用 xml 文件的形式来进行配置。这意味着不会出现其他的Spring 配置类型(比如声明的方式或基于 Java Class 的配置方式) · Spring 的 XML 配置方式是使用被 Spring 命名空间的所支持的一系列的 XML 标签来实现的。Spring 有以下主要的命名空间:context、beans、jdbc、tx、aop、mvc 和 aso。
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
下面这个 web.xml 仅仅配置了 DispatcherServlet,这件最简 单的配置便能满足应用程序配置运行时组件的需求。
Archetype Created Web Application spring
org.springframework.web.servlet.DispatcherServlet 1
spring /
21、Spring 有几种配置方式? 将 Spring 配置到应用开发中有以下三种方式:
基于 XML 的配置
基于注解的配置
基于 Java 的配置
22、如何用基于 Java 配置的方式配置 Spring? Spring 对 Java 配置的支持是由@Configuration 注解和@Bean 注解来实现的。由@Bean 注解的方法将会实例化、配置和初始化一个新对象,这个对象将由 Spring 的 IoC 容器来管理。@Bean 声明所起到的作用与元素类似。被@Configuration 所注解的类则表示这个类的主要目的是作为bean 定义的资源。被@Configuration 声明的类可以通过在同一个类的内部调用@bean 方法来设置嵌入 bean 的依赖关系。 最简单的@Configuration 声明类请参考下面的代码:
@Configuration public class AppConfig{
@Bean public MyService myService() {
return new MyServiceImpl();
}
}
对于上面的@Beans 配置文件相同的 XML 配置文件如下: class="com.howtodoinjava.services.MyServiceImpl"/>
上述配置方式的实例化方式如下:利用AnnotationConfigApplicationContext 类进行实例化
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
要使用组件组建扫描,仅需用@Configuration 进行注解即可:
@Configuration @ComponentScan(basePackages = "com.howtodoinjava") public class AppConfig { ... }
在上面的例子中,com.acme 包首先会被扫到,然后再容器内查找被@Component 声明的类,找到后将这些类按照 Sringbean 定义进行注册。 如果你要在你的 web 应用开发中选用上述的配置的方式的话,需要用 AnnotationConfigWebApplicationContext 类来读取配置文件,可以用来配置 Spring 的 Servlet 监听器ContrextLoaderListener 或者 Spring MVC 的DispatcherServlet。
contextClass
org.springframework.web.context.support.AnnotationConf igWebApplicationContext
contextConfigLocation com.howtodoinjava.AppConfig
org.springframework.web.context.ContextLoaderLis tener
dispatcher org.springframework.web.servlet.DispatcherServlet contextClass
org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation com.howtodoinjava.web.MvcConfig
dispatcher /app/*
23、怎样用注解的方式配置 Spring? Spring 在 2.5 版本以后开始支持用注解的方式来配置依赖注入。可以用注解的方式来替代 XML 方式的 bean 描述,可以将 bean 描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即可。注解注入将会被容器在XML 注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。 注解装配在 Spring 中是默认关闭的。所以需要在 Spring 文件中配置一下才能使用基于注解的装配模式。如果你想要在你的应用程序中使用关于注解的方法的话,请参考如下的配置。
在标签配置完成以后,就可以用注解的方式在 Spring 中向属性、方法和构造方法中自动装配变量。 下面是几种比较重要的注解类型:
@Required:该注解应用于设值方法。
@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。
@Qualifier:该注解和@Autowired 注解搭配使用,用于消除特定 bean 自动装配的歧义。
JSR-250 Annotations:Spring 支持基于 JSR-250 注解的以下注解,@Resource、@PostConstruct 和@PreDestroy。
24、请解释 Spring Bean 的生命周期? Spring Bean 的生命周期简单易懂。在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个 bean 不在被调用时需要进行相关的析构操作,并从 bean 容器中移除。 Spring bean factory 负责管理在 spring 容器中被创建的bean 的生命周期。Bean 的生命周期由两组回调(callback)方法组成。
初始化之后调用的回调方法。
销毁之前调用的回调方法。 Spring 框架提供了以下四种方式来管理 bean 的生命周期事件: · InitializingBean 和 DisposableBean 回调接口 · 针对特殊行为的其他 Aware 接口 · Bean 配置文件中的 Custom init()方法和 destroy()方法 · @PostConstruct 和@PreDestroy 注解方式 · 使用 customInit()和 customDestroy()方法管理 bean 生命周期的代码样例如下:
25、Spring Bean 的作用域之间有什么区别? Spring 容器中的 bean 可以分为 5 个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下: 1.singleton:这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个 bean 的实例,单例的模式由 bean factory 自身来维护。 2.prototype:原形范围与单例范围相反,为每一个 bean 请求提供一个实例。 3.request:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean 会失效并被垃圾回收器回收。 4.Session:与请求范围类似,确保每个 session 中有一个 bean的实例,在 session 过期后,bean 会随之失效。 5.global-session:global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器中工作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共用全局的存储变量的话,那么这全局变量需要存储在 global-session 中。全局作用域与 Servlet 中的 session 作用域效果相同。
26、Spring 框架中的单例 Beans 是线程安全的么? · Spring 框架并没有对单例 bean 进行任何多线程的封装处理。关于单例 bean 的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean 并没有可变的状态(比如 Serview 类和 DAO 类),所以在某种程度上说 Spring 的单例 bean 是线程安全的。如果你的 bean 有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。 · 最浅显的解决办法就是将多态 bean 的作用域由“singleton”变更为“prototype”。
27、什么是 Spring inner beans? 在 Spring 框架中,无论何时 bean 被使用时,当仅被调用了一个属性。一个明智的做法是将这个 bean 声明为内部bean。内部 bean 可以用 setter 注入“属性”和构造方法注入“构造参数”的方式来实现。 比如,在我们的应用程序中,一个 Customer 类引用了一个Person 类,我们的要做的是创建一个 Person 的实例,然后在Customer 内部使用。
public class Customer{ private Person person; //Setters and Getters } public class Person{ private String name; private String address; private int age; //Setters and Getters }
内部 bean 的声明方式如下:
class="com.howtodoinjava.common.Customer">
28、请举例说明如何在 Spring 中注入一个 Java Collection? Spring 提供了以下四种集合类的配置元素: · : 该标签用来装配可重复的 list 值。 · : 该标签用来装配没有重复的 set 值。 ·: 该标签支持注入键和值都是字符串类型的键值对。 下面看一下具体的例子:
INDIA Pakistan USA UK
INDIA Pakistan USA UK
admin@nospam.com support@nospam.com
29、如何向 Spring Bean 中注入一个 Java.util.Properties? 第一种方法是使用如下面代码所示的标签:
admin@nospam.com support@nospam.com
也可用”util:”命名空间来从 properties 文件中创建出一个propertiesbean,然后利用 setter 方法注入 bean 的引用。
30、请解释 Spring Bean 的自动装配? 在 Spring 框架中,在配置文件中设定 bean 的依赖关系是一个很好的机制,Spring 容器还可以自动装配合作关系 bean 之间的关联关系。这意味着 Spring 可以通过向 Bean Factory 中注入的方式自动搞定 bean 之间的依赖关系。自动装配可以设置在每个 bean 上,也可以设定在特定的 bean 上。 下面的 XML 配置文件表明了如何根据名称将一个 bean 设置为自动装配: class= "com.howtodoinjava.EmployeeDAOImpl" autowire= "byName" /> 除了 bean 配置文件中提供的自动装配模式,还可以使用 @Autowired 注解来自动装配指定的 bean。在使用 @Autowired 注解之前需要在按照如下的配置方式在 Spring配置文件进行配置才可以使用。
AutowiredAnnotationBeanPostProcessor 达到相同的效果。
配置好以后就可以使用@Autowired 来标注了。
@Autowired public EmployeeDAOImpl ( EmployeeManager manager ) {
this.manager = manager;
}
31、请解释自动装配模式的区别? 在 Spring 框架中共有 5 种自动装配,让我们逐一分析。
no:这是 Spring 框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在 bean 定义中用标签明确的设置依赖关系。
byName:该选项可以根据 bean 名称设置依赖关系。当向一个 bean 中自动装配一个属性时,容器将根据 bean 的名称自动在在配置文件中查询一个匹配的 bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
byType:该选项可以根据 bean 类型设置依赖关系。当向一个bean 中自动装配一个属性时,容器将根据 bean 的类型自动在在配置文件中查询一个匹配的 bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
constructor:造器的自动装配和 byType 模式类似,但是仅仅适用于与有构造器相同参数的 bean,如果在容器中没有找到与构造器参数类型一致的 bean,那么将会抛出异常。
autodetect:该模式自动探测使用构造器自动装配或者byType 自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在 bean 内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe 的自动装配方式。
32、如何开启基于注解的自动装配? 要使用 @Autowired,需要注册AutowiredAnnotationBeanPostProcessor,可以有以下两 种方式来实现: 1、引入配置文件中的下引入
2、在 bean 配置文件中直接引入AutowiredAnnotationBeanPostProcessor
33、请举例解释@Required 注解? 在产品级别的应用中,IoC 容器可能声明了数十万了 bean,bean 与 bean 之间有着复杂的依赖关系。设值注解方法的短板之一就是验证所有的属性是否被注解是一项十分困难的操作。可以通过在中设置“dependency-check”来解决这个问题。 在应用程序的生命周期中,你可能不大愿意花时间在验证所有bean 的属性是否按照上下文文件正确配置。或者你宁可验证某个 bean 的特定属性是否被正确的设置。即使是用“dependency-check”属性也不能很好的解决这个问题,在这种情况下,你需要使用@Required 注解。需要用如下的方式使用来标明 bean 的设值方法。
public class EmployeeFactoryBean extends AbstractFactoryBean{ private String designation; public String getDesignation() { return designation; }
@Required public void setDesignation(Stringdesignation) { this.designation = designation; }
//more code here } RequiredAnnotationBeanPostProcessor 是 Spring 中的后置处理用来验证被@Required 注解的 bean 属性是否被正确的设置了。在使用 RequiredAnnotationBeanPostProcesso来验证 bean 属性之前,首先要在 IoC 容器中对其进行注册: 但是如果没有属性被用 @Required 注解过的话,后置处理器会抛出一个 BeanInitializationException 异常。
34、请举例解释@Autowired 注解? @Autowired 注解对自动装配何时何处被实现提供了更多细粒度的控制。@Autowired 注解可以像@Required 注解、构造器一样被用于在 bean 的设值方法上自动装配 bean 的属性,一个参数或者带有任意名称或带有多个参数的方法。 比如,可以在设值方法上使用@Autowired 注解来替代配置文件中的元素。当 Spring 容器在 setter 方法上找到@Autowired 注解时,会尝试用 byType 自动装配。当然我们也可以在构造方法上使用@Autowired 注解。带有@Autowired 注解的构造方法意味着在创建一个 bean 时将会被自动装配,即便在配置文件中使用 元素。
public class TextEditor { private SpellChecker spellChecker;
@Autowired public TextEditor(SpellChecker spellChecker){ System. out.println( "Inside TextEditor constructor." ); this.spellChecker = spellChecker; }
public void spellCheck(){ spellChecker.checkSpelling(); } } 下面是没有构造参数的配置方式:
35、请举例说明@Qualifier 注解? @Qualifier 注解意味着可以在被标注 bean 的字段上可以自动装配。Qualifier 注解可以用来取消 Spring 不能取消的 bean应用。 下面的示例将会在 Customer 的 person 属性中自动装配person 的值。
public class Customer{ @Autowired private Person person; }
下面我们要在配置文件中来配置 Person 类。
Spring 会知道要自动装配哪个 person bean 么?不会的,但是运行上面的示例时,会抛出下面的异常: Caused by :org.springframework.beans.factory.NoSuchBeanDefinition Exception: No unique bean of type [com.howtodoinjava.common.Person] is defined: expected single matching bean but found 2: [personA, personB]
要解决上面的问题,需要使用 @Quanlifier 注解来告诉Spring 容器要装配哪个 bean:
public class Customer{
@Autowired
@Qualifier("personA")
private Person person;
}
36、构造方法注入和设值注入有什么区别? 请注意以下明显的区别: 1.在设值注入方法支持大部分的依赖注入,如果我们仅需要注入int、string 和 long 型的变量,我们不要用设值的方法注入。对于基本类型,如果我们没有注入的话,可以为基本类型设置默认值。在构造方法注入不支持大部分的依赖注入,因为在调用构造方法中必须传入正确的构造参数,否则的话为报错。 2.设值注入不会重写构造方法的值。如果我们对同一个变量同时使用了构造方法注入又使用了设置方法注入的话,那么构造方法将不能覆盖由设值方法注入的值。很明显,因为构造方法尽在对象被创建时调用。 3.在使用设值注入时有可能还不能保证某种依赖是否已经被注入,也就是说这时对象的依赖关系有可能是不完整的。而在另一种情况下,构造器注入则不允许生成依赖关系不完整的对象。 4.在设值注入时如果对象 A 和对象 B 互相依赖,在创建对象 A时 Spring 会抛出 sObjectCurrentlyInCreationException 异常,因为在 B 对象被创建之前 A 对象是不能被创建的,反之亦然。所以 Spring 用设值注入的方法解决了循环依赖的问题,因对象的设值方法是在对象被创建之前被调用的。
37、Spring 框架中有哪些不同类型的事件? Spring 的 ApplicationContext 提供了支持事件和代码中监听器的功能。我们可以创建 bean 用来监听在ApplicationContext 中发布的事件。ApplicationEvent 类和在 ApplicationContext 接口中处理的事件,如果一个 bean实现了 ApplicationListener 接口,当一个 ApplicationEvent被发布以后,bean 会自动被通知。 public class AllApplicationEventListener implements ApplicationListener < ApplicationEvent >{
@Override public void onApplicationEvent(ApplicationEvent applicationEvent){
//process event
}
}
Spring 提供了以下 5 中标准的事件:
上下文更新事件(ContextRefreshedEvent):该事件会在ApplicationContext 被初始化或者更新时发布。也可以在调用 ConfigurableApplicationContext 接口中的 refresh()方法时被触发。
上下文开始事件(ContextStartedEvent):当容器调用ConfigurableApplicationContext 的 Start()方法开始/重新开始容器时触发该事件。
上下文停止事件(ContextStoppedEvent):当容器调用ConfigurableApplicationContext 的 Stop()方法停止容器时触发该事件。
上下文关闭事件(ContextClosedEvent):当ApplicationContext 被关闭时触发该事件。容器被关闭时,其管理的所有单例 Bean 都被销毁。
请求处理事件(RequestHandledEvent):在 Web 应用中,当一个 http 请求(request)结束触发该事件。除了上面介绍的事件以外,还可以通过扩展ApplicationEvent 类来开发自定义的事件。
public class CustomApplicationEvent extends ApplicationEvent { public CustomApplicationEvent ( Object source, final String msg ) { super(source); System.out.println("Created a Custom event"); } } 为了监听这个事件,还需要创建一个监听器: public class CustomEventListener implements ApplicationListener < CustomApplicationEvent >{
@Override
public void onApplicationEvent(CustomApplicationEvent applicationEvent) {
//handle event
}
}之后通过 applicationContext 接口的 publishEvent()方法来发布自定义事件。 CustomApplicationEvent customEvent = new CustomApplicationEvent(applicationContext, "Testmessage"); applicationContext.publishEvent(customEvent);
38、FileSystemResource 和 ClassPathResource 有何区别? 在 FileSystemResource 中需要给出 spring-config.xml 文件在你项目中的相对路径或者绝对路径。在 ClassPathResource中 spring 会在 ClassPath 中自动搜寻配置文件,所以要把ClassPathResource 文件放在 ClassPath 下。 如果将 spring-config.xml 保存在了 src 文件夹下的话,只需给出配置文件的名称即可,因为 src 文件夹是默认。 简而言之,ClassPathResource 在环境变量中读取配置文件,FileSystemResource 在配置文件中读取配置文件。
39.谈谈你对springIOC和DI的理解,它们有什么区别? IoCInverseofControl反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架 DI:DependencyInjection依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件 面试题:IoC和DI的区别? IoC控制反转,指将对象的创建权,反转到Spring容器,DI依赖注入,指Spring创建对象的过程中,将对象依赖属性通过配置进行注入
40.BeanFactory接口和ApplicationContext接口有什么区别? ①、ApplicationContext接口继承BeanFactory接口,Spring核心工厂是BeanFactory,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean,ApplicationContext是会在加载配置文件时初始化Bean。 ②、ApplicationContext是对BeanFactory扩展,它可以进行国际化处理、事件传递和bean自动装配以及各种不同应用层的Context实现开发中基本都在使用ApplicationContext,web项目使用WebApplicationContext,很少用到BeanFactory BeanFactorybeanFactory=new XmlBeanFactory(new ClassPathResource(
"applicationContext.xml"));
IHelloServicehelloService=(IHelloService) beanFactory.getBean(
"helloService");
helloService.sayHello();
41.spring配置bean实例化有哪些方式? 1)使用类构造器实例化(默认无参数)
class="cn.itcast.spring.b_instance.Bean1">
2)使用静态工厂方法实例化(简单工厂模式) //下面这段配置的含义:调用Bean2Factory的getBean2方法得到bean2
class="cn.itcast.spring.b_instance.Bean2Factory"
factory-method="getBean2">
3)使用实例工厂方法实例化(工厂方法模式)
//先创建工厂实例bean3Facory,再通过工厂实例创建目标bean实例
class="cn.itcast.spring.b_instance.Bean3Factory">
factory-bean="bean3Factory" factory-method="getBean3">
你可能感兴趣的:(javaspring)
java spring项目_通过设置Spring Java Format插件集来保持Java项目的“ Spring”风格
diluan6799
java eclipse spring maven gradle
javaspring项目Spring为您提供了一个方便的工具,可确保您的Java项目具有一致的“Spring”风格!认识SpringJavaFormat插件集!该工具已于今年5月发布,当前版本为0.0.6。设置的插件包括:应用包装和空白约定的源格式化程序一个Checkstyle插件,可在整个代码库中实现一致性该项目的目的是提供一致性,因此,每个插件通常都不可配置。这意味着您需要更改代码以匹配所需的
【数据库学习】Flyway
兔兔西
数据库学习 数据库学习之postgres 数据库
1,功能数据库版本管理;实现管理并跟踪数据库变更,支持数据库版本自动升级。2,使用1)java使用添加依赖org.flywaydbflyway-core6.5.7配置:javaspring:flyway:#是否启用enabled:true#可以支持多个location,用','隔开locations:classpath:db/migration#是否创建元数据表validate-on-migrat
Spring是怎样处理循环依赖的?
后端开发萌新
死磕Spring源码系列 spring java
文章目录环境前言什么是循环依赖?所有注入场景的循环依赖Spring都能解决吗?场景TestA.javaTestB.javaspring-context.xmlMain.java测试结果Spring是怎么解决循环依赖的?前置说明源码解析addSingletonFactorygetSingletongetEarlyBeanReference总结环境SpringFrameworkVersion:5.3.
【JavaSpring】为什么使用sring以及其中的bean线程安全吗?spring支持几种bean作用域和自动装配bean哪些方式?spring事务隔离?mvc运行流程
王果冻ddd
安全 spring mvc java 开发语言
目录1、为什么要使用spring?2、spring中的bean是线程安全的吗?3、spring支持几种bean的作用域?4、spring自动装配bean有哪些方式?5、spring事务实现方式有哪些?6、说一下spring的事务隔离?7、说一下springmvc运行流程?1、为什么要使用spring?•spring提供ioc技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松
JavaSpring-AOP详解(Maven导入 深入浅出)
GarsonW
软件开发 spring java
在CSDN上看了很多关于配置AOP的文章,不是很复杂就是省略了很多步骤。本文用最简单并且最清晰的方法从导入依赖到AOP底层原理。逐步讲解SpringAOP的相关操作帮你快速了解AOP。目录通过Maven仓库导入相关依赖AOP(开始)AOP术语AOP五种通知AOP相同切入点的抽取有多个增强类对同一个同一个方法进行增强通过Maven仓库导入相关依赖文件结构:pom.xml:4.0.0comGarson
85道Java Spring综合面试题详解含答案(值得珍藏)
孤蓬&听雨
面试资料 java spring 开发语言 面试
点击下载《85道JavaSpring综合面试题详解含答案(值得珍藏)》1.Spring概述1.1什么是spring?Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。1.2使用Spring框架的好处是什么?轻量:S
深入理解Java Spring中的全局异常处理:以Reggie项目为例
hoypte
java spring 状态模式
在JavaSpring开发中,异常处理是非常关键的一部分。优雅地处理异常不仅可以提升用户体验,还能帮助开发者快速定位问题。本文将通过Reggie项目中的一个实例,深入探讨如何在Spring中使用@ControllerAdvice和@ExceptionHandler实现全局异常处理。项目背景Reggie是一个基于Spring框架的Web应用,它可能包含多个控制器(Controller)来处理不同的业
Java Spring注解——Controller层、Service层、mapper层
千Deng
java 开发语言
目录前言一、Controller层常用注解(一)写在类名上方(二)写在类内部二、Service层常用注解三、mapper层常用注解四、lombok注解(一)用于实体类(二)用于类对象后续敬请期待前言JavaSpring注解——Controller层、Service层、mapper层等一、Controller层常用注解(一)写在类名上方@RestController@RestController可将
SpringBoot动态切换数据源
陆卿之
spring boot 后端 java
文章目录SpringBoot动态切换数据源数据库添加依赖配置数据源信息TestUser.javaTestUserMapper.java方式一(ThreadLocal)DynamicDataSourceContextHolder.javaDynamicRoutingDataSource.javaDynamicDataSourceConfig.javaTestController.javaSpring
Java Spring框架基础教程
C红毛丹
java spring 开发语言
1.引言JavaSpring框架是一个轻量级的、开源的应用程序框架,用于开发Java应用程序。它提供了一种简化和加速Java应用程序开发的方式,同时也提供了一些强大的功能和特性。本教程将介绍JavaSpring框架的基础知识和使用方法,帮助读者快速上手并理解该框架的核心概念。2.Spring框架概述Spring框架由RodJohnson于2002年创建,最初是为了解决企业级应用程序开发中的一些常见
@Scheduled注解 定时任务讲解
蓝胖子不是胖子
spring boot spring
用于在JavaSpring框架中定时执行特定任务的注解@Scheduled,它能够指定方法在特定时间间隔或特定时间点执行。默认参数是cron,cron参数被用来定义一个Cron表达式,它代表了任务执行的时间规则参数如下Cron这是是一种时间表达式,用于表示定时任务的执行规则。在Spring中,@Scheduled注解的cron参数就是用来设置Cron表达式的。Cron表达式的基本格式为:secdo
Spring Boot Serverless 实战 | Serverless 应用的监控与调试
阿里云云栖号
云栖号技术分享 spring boot serverless java
简介:SpringBoot是基于JavaSpring框架的套件,它预装了Spring的一系列组件,让开发者只需要很少的配置就可以创建独立运行的应用程序。在云原生的环境中,有大量的平台可以运行SpringBoot应用,例如虚拟机、容器等。但其中最有吸引力的,是以Serverless的方式运行SpringBoot应用。作者:西流SpringBoot是基于JavaSpring框架的套件,它预装了Spri
security登录实战
Stephen_CY666
java
以下是一个基本的security登录实战代码示例,采用JavaSpring框架:配置security@Configuration@EnableWebSecuritypublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{@AutowiredprivateUserDetailServiceImpluserDetailsService;
JavaSpring使用Quartz任务调度定时器
美渊科技
java
Quartz任务调度是什么Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz是一个完全由Java编写的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能,但就其简易形式看,你会发现它易用得简直让人受不了!摘自百度百科其实,他还是没有解释明白,我简单说一
Spring实战(第4版)pdf
weixin_30619101
java 开发工具 后端
下载地址:网盘下载Spring实战(第4版)是非常畅销的Spring图书也是国内读者极其熟悉的Spring经典图书之一,Javaweb开发从入门到精通,了解JavaSpring技术内幕。全球有超过100000的开发者使用本书来学习Spring中文版累计销售超10万册,畅销经典Spring技术图书,针对Spring4全新升级作者CraigWalls,SpringSource的软件开发人员,也是一位畅
【主流技术】Redis 在 Spring 框架中的实践
手术刀呀
前言在JavaSpring项目中,数据与远程数据库的频繁交互对服务器的内存消耗比较大,而Redis的特性可以有效解决这样的问题。Redis的几个特性:Redis以内存作为数据存储介质,读写数据的效率极高;Redis支持key-value等多种数据结构,提供字符串,哈希,列表,队列,集合结构直接存取于内存,可持久化(RDB和AOF);支持主从模式,可以配置集群。下面,我将和大家一起学习分享Redis
[学习][笔记]设计模式(基于C/C++实现)<八>工厂模式
二进制怪兽
设计模式 设计模式
文章目录工厂模式简单工厂模式定义使用场景基本思路实例总结工厂方法模式定义使用场景基本思路实例总结抽象工厂模式定义使用场景基本思路实例总结工厂总结模板工厂模式定义使用场景基本思路实例总结产品注册模板类+单例工厂模板类定义使用场景基本思路实例总结对于javaSpring工厂模式思考总结工厂模式C++深入浅出工厂模式(初识篇)C++深入浅出工厂模式(进阶篇)这种类型的设计模式属于创建型模式,它提供了一种
Centos安装RabbitMQ,JavaSpring发送RabbitMQ延迟延时消息,JavaSpring消费RabbitMQ消息
胡子哥502
java MQ centos rabbitmq java 延迟消息
1,版本说明erlang和rabbitmq版本说明https://www.rabbitmq.com/which-erlang.html确认需要安装的mq版本以及对应的erlang版本。2,下载安装文件RabbitMQ下载地址:https://packagecloud.io/rabbitmq/rabbitmq-serverErlang下载地址:https://packagecloud.io/rabb
【Javaspring学习笔记】动态代理
hwj729748198
Javaspring Javaspring 学习笔记
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IOC,另一个就是AOP,对于IOC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。动态代理有两种方式:1、jdk动态代理是由java内
从零开始认识并操纵Spring Aop事务
Automn
[TOC]声明:从零开始,并不代表你对javaSpring一点都不懂的程度哈,本实例只是过一个概貌,详细内容会分多篇文章拆解业务介绍要想要设计一个和事务操作相关的业务,我们以最经典的转账的例子来描述转账,即两个用户之间钱的关系变动,但要求总和不变版本声明本案例使用的Web版本2.5,Spring版本为4.3开发工具为eclipse操作步骤导包Spring各版本官方包下载下载的包包含Spring包以
Spring源码:占位符${}解析源码分析
mumubili
spring PropertySource 属性配置 java spring spring boot
目录1.Spring中用到的占位符解析类2.PropertySourcesPlaceholderConfigurer实现bean工厂后处理器3.PropertyPlaceholderHelper帮助类解析逻辑在javaspring项目中,我们经常使用到${}占位符实现属性值的获取,最常见的就是使用@Value("${propsKey}")的方式完成bean属性值的注入,如下:@Value("${a
基于JavaSpring的学生宿舍管理系统
柒月玖.
Java java
点击以下链接获取源码:https://download.csdn.net/download/qq_64505944/88407844
Java Spring拦截器优化实践: 专注于API路径拦截
猫头虎
已解决的Bug专区 Spring全家桶技术专区 java spring 开发语言
博主猫头虎带您GotoNewWorld.✨博客首页——猫头虎的博客《面试题大全专栏》文章图文并茂生动形象简单易学!欢迎大家来踩踩~《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~希望本文能够给您带来一定的帮助文章粗浅,敬请批评指正!文章目录JavaSpring拦截器优化实践:专注于API路径拦截摘要
处理multipart形式的数据
losspm
前言由于本人接触最多的是电子商城的开发,目前涉及到的接口数据处理最多的为字符串,少部分为图片,因此处理大型文件的经验比较少。在学习JavaSpring过程中,了解到JavaSpring处理数据过程中有很多值得学习的地方。就拿multipart来说,Spring为multipart提供了很多扩展性的配置,能够针对不同的业务场景进行相关配置multipart对于表单提交,multipart格式的数据会
golang工程——gRpc 拦截器及原理
咚伢
golang 后端
oauth2认证与拦截器类似javaspring中的拦截器。gRpc也有拦截器的说法,拦截器可作用于客户端请求,服务端请求。对请求进行拦截,进行业务上的一些封装校验等,类似一个中间件的作用拦截器类型一元请求拦截器流式请求拦截器链式拦截器(一个个调用对应处理函数)使用场景:拦截器可以从元数据获取一些认证进行进行校验。服务端拦截器拦截器定义interceptor.gopackageserverimpo
layui+java spring 实现图片文件新增到数据库
Luffe船长
java layui spring
项目场景:layui+javaspring实现图片文件新增到数据库解决方案:1.首先layui是个不再更新的网址有想了解的可以浏览官网表格组件table-Layui文档2.官网内有专门的组件代码直接粘过来即可Demo单图片上传多图片上传预览图:layui.use(function(){varupload=layui.upload;varlayer=layui.layer;varelement=la
你真的需要微服务?
whyreal
原文我们已经设计和构建了十多年的软件,大部分时间我们一直在使用优秀的Symfony框架来实现这一目标。Symfony是一个传统的PHP组件集,受JavaSpring的启发,我们发现它非常适合作为我们的企业Web应用程序和数字产品的快速开发。然而,去年发布的Symfony4代表了该框架的重点逐渐变化;趋向于微服务方法,这种方法在过去几年中越来越受欢迎。为了说明这种转变,新版本宣称“微服务优先”,Sy
【JavaSpring】Aop的通知类型,获取数据
岩塘
JavaSpring java 前端 开发语言
AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置前置通知@Pointcut("execution(voidorg.example.dao.BookDao.update())")privatevoidpt(){}@Before("pt()")publicvoidbefore(){System.out.println("beforeadvice");}后
【JavaSpring】Aop案例
岩塘
java 开发语言
测定接口执行效率描述:在接口执行前输出当前系统时间开发模式:XMLor注解思路分析:1.导入坐标(pom.xml)org.aspectjaspectjweaver1.9.4org.springframeworkspring-context5.2.25.RELEASEjunitjunit3.8.1test2.制作连接点的方法(原始操作)packageorg.example.dao;publicint
【JavaSpring】Aop切入点表达式
岩塘
java 开发语言
语法格式切入点:要进行增强的方法切入点表达式:要进行增强的方法的描述方式标准格式:动作关键词(访问修饰符【可省略】返回值包名.类名.方法名(参数)异常名【可省略】)描述方法一(描述接口)execution("execution(voidorg.example.dao.BookDao.update())")描述方法二(描述实现类)execution("execution(voidorg.exampl
用MiddleGenIDE工具生成hibernate的POJO(根据数据表生成POJO类)
AdyZhang
POJO eclipse Hibernate MiddleGenIDE
推荐:MiddlegenIDE插件, 是一个Eclipse 插件. 用它可以直接连接到数据库, 根据表按照一定的HIBERNATE规则作出BEAN和对应的XML ,用完后你可以手动删除它加载的JAR包和XML文件! 今天开始试着使用
.9.png
Cb123456
android
“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png
智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形。
我们都知道android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边
算法的效率
天子之骄
算法效率 复杂度 最坏情况运行时间 大O阶 平均情况运行时间
算法的效率
效率是速度和空间消耗的度量。集中考虑程序的速度,也称运行时间或执行时间,用复杂度的阶(O)这一标准来衡量。空间的消耗或需求也可以用大O表示,而且它总是小于或等于时间需求。
以下是我的学习笔记:
1.求值与霍纳法则,即为秦九韶公式。
2.测定运行时间的最可靠方法是计数对运行时间有贡献的基本操作的执行次数。运行时间与这个计数成正比。
java数据结构
何必如此
java 数据结构
Java 数据结构
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:
枚举(Enumeration)
位集合(BitSet)
向量(Vector)
栈(Stack)
字典(Dictionary)
哈希表(Hashtable)
属性(Properties)
以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collect
MybatisHelloWorld
3213213333332132
//测试入口TestMyBatis
package com.base.helloworld.test;
import java.io.IOException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibat
Java|urlrewrite|URL重写|多个参数
7454103
java xml Web 工作
个人工作经验! 如有不当之处,敬请指点
1.0 web -info 目录下建立 urlrewrite.xml 文件 类似如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE u
达梦数据库+ibatis
darkranger
sql mysql ibatis SQL Server
--插入数据方面
如果您需要数据库自增...
那么在插入的时候不需要指定自增列.
如果想自己指定ID列的值, 那么要设置
set identity_insert 数据库名.模式名.表名;
----然后插入数据;
example:
create table zhabei.test(
id bigint identity(1,1) primary key,
nam
XML 解析 四种方式
aijuans
android
XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法。
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object
spring中配置文件占位符的使用
avords
1.类
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.o
前端工程化-公共模块的依赖和常用的工作流
bee1314
webpack
题记: 一个人的项目,还有工程化的问题嘛? 我们在推进模块化和组件化的过程中,肯定会不断的沉淀出我们项目的模块和组件。对于这些沉淀出的模块和组件怎么管理?另外怎么依赖也是个问题? 你真的想这样嘛? var BreadCrumb = require(‘../../../../uikit/breadcrumb’); //真心ugly。
上司说「看你每天准时下班就知道你工作量不饱和」,该如何回应?
bijian1013
项目管理 沟通 IT职业规划
问题:上司说「看你每天准时下班就知道你工作量不饱和」,如何回应
正常下班时间6点,只要是6点半前下班的,上司都认为没有加班。
Eno-Bea回答,注重感受,不一定是别人的
虽然我不知道你具体从事什么工作与职业,但是我大概猜测,你是从事一项不太容易出现阶段性成果的工作
TortoiseSVN,过滤文件
征客丶
SVN
环境:
TortoiseSVN 1.8
配置:
在文件夹空白处右键
选择 TortoiseSVN -> Settings
在 Global ignote pattern 中添加要过滤的文件:
多类型用英文空格分开
*name : 过滤所有名称为 name 的文件或文件夹
*.name : 过滤所有后缀为 name 的文件或文件夹
--------
【Flume二】HDFS sink细说
bit1129
Flume
1. Flume配置
a1.sources=r1
a1.channels=c1
a1.sinks=k1
###Flume负责启动44444端口
a1.sources.r1.type=avro
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=44444
a1.sources.r1.chan
The Eight Myths of Erlang Performance
bookjovi
erlang
erlang有一篇guide很有意思: http://www.erlang.org/doc/efficiency_guide
里面有个The Eight Myths of Erlang Performance: http://www.erlang.org/doc/efficiency_guide/myths.html
Myth: Funs are sl
java多线程网络传输文件(非同步)-2008-08-17
ljy325
java 多线程 socket
利用 Socket 套接字进行面向连接通信的编程。客户端读取本地文件并发送;服务器接收文件并保存到本地文件系统中。
使用说明:请将TransferClient, TransferServer, TempFile三个类编译,他们的类包是FileServer.
客户端:
修改TransferClient: serPort, serIP, filePath, blockNum,的值来符合您机器的系
读《研磨设计模式》-代码笔记-模板方法模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
配置心得
chenyu19891124
配置
时间就这样不知不觉的走过了一个春夏秋冬,转眼间来公司已经一年了,感觉时间过的很快,时间老人总是这样不停走,从来没停歇过。
作为一名新手的配置管理员,刚开始真的是对配置管理是一点不懂,就只听说咱们公司配置主要是负责升级,而具体该怎么做却一点都不了解。经过老员工的一点点讲解,慢慢的对配置有了初步了解,对自己所在的岗位也慢慢的了解。
做了一年的配置管理给自总结下:
1.改变
从一个以前对配置毫无
对“带条件选择的并行汇聚路由问题”的再思考
comsci
算法 工作 软件测试 嵌入式 领域模型
2008年上半年,我在设计并开发基于”JWFD流程系统“的商业化改进型引擎的时候,由于采用了新的嵌入式公式模块而导致出现“带条件选择的并行汇聚路由问题”(请参考2009-02-27博文),当时对这个问题的解决办法是采用基于拓扑结构的处理思想,对汇聚点的实际前驱分支节点通过算法预测出来,然后进行处理,简单的说就是找到造成这个汇聚模型的分支起点,对这个起始分支节点实际走的路径数进行计算,然后把这个实际
Oracle 10g 的clusterware 32位 下载地址
daizj
oracle
Oracle 10g 的clusterware 32位 下载地址
http://pan.baidu.com/share/link?shareid=531580&uk=421021908
http://pan.baidu.com/share/link?shareid=137223&uk=321552738
http://pan.baidu.com/share/l
非常好的介绍:Linux定时执行工具cron
dongwei_6688
linux
Linux经过十多年的发展,很多用户都很了解Linux了,这里介绍一下Linux下cron的理解,和大家讨论讨论。cron是一个Linux 定时执行工具,可以在无需人工干预的情况下运行作业,本文档不讲cron实现原理,主要讲一下Linux定时执行工具cron的具体使用及简单介绍。
新增调度任务推荐使用crontab -e命令添加自定义的任务(编辑的是/var/spool/cron下对应用户的cr
Yii assets目录生成及修改
dcj3sjt126com
yii
assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件,但是我们又希望将module单独出来,所以需要使用发布,即将一个目录下的文件复制一份到assets下面方便通过url访问。
assets设置对应的方法位置 \framework\web\CAssetManager.php
assets配置方法 在m
mac工作软件推荐
dcj3sjt126com
mac
mac上的Terminal + bash + screen组合现在已经非常好用了,但是还是经不起iterm+zsh+tmux的冲击。在同事的强烈推荐下,趁着升级mac系统的机会,顺便也切换到iterm+zsh+tmux的环境下了。
我为什么要要iterm2
切换过来也是脑袋一热的冲动,我也调查过一些资料,看了下iterm的一些优点:
* 兼容性好,远程服务器 vi 什么的低版本能很好兼
Memcached(三)、封装Memcached和Ehcache
frank1234
memcached ehcache spring ioc
本文对Ehcache和Memcached进行了简单的封装,这样对于客户端程序无需了解ehcache和memcached的差异,仅需要配置缓存的Provider类就可以在二者之间进行切换,Provider实现类通过Spring IoC注入。
cache.xml
<?xml version="1.0" encoding="UTF-8"?>
Remove Duplicates from Sorted List II
hcx2013
remove
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,Given 1->2->3->3->4->4->5,
Spring4新特性——注解、脚本、任务、MVC等其他特性改进
jinnianshilongnian
spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
MySQL安装文档
liyong0802
mysql
工作中用到的MySQL可能安装在两种操作系统中,即Windows系统和Linux系统。以Linux系统中情况居多。
安装在Windows系统时与其它Windows应用程序相同按照安装向导一直下一步就即,这里就不具体介绍,本文档只介绍Linux系统下MySQL的安装步骤。
Linux系统下安装MySQL分为三种:RPM包安装、二进制包安装和源码包安装。二
使用VS2010构建HotSpot工程
p2p2500
HotSpot OpenJDK VS2010
1. 下载OpenJDK7的源码:
http://download.java.net/openjdk/jdk7
http://download.java.net/openjdk/
2. 环境配置
▶
Oracle实用功能之分组后列合并
seandeng888
oracle 分组 实用功能 合并
1 实例解析
由于业务需求需要对表中的数据进行分组后进行合并的处理,鉴于Oracle10g没有现成的函数实现该功能,且该功能如若用JAVA代码实现会比较复杂,因此,特将SQL语言的实现方式分享出来,希望对大家有所帮助。如下:
表test 数据如下:
ID,SUBJECTCODE,DIMCODE,VALUE
1&nbs
Java定时任务注解方式实现
tuoni
java spring jvm xml jni
Spring 注解的定时任务,有如下两种方式:
第一种:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http
11大Java开源中文分词器的使用方法和分词效果对比
yangshangchuan
word分词器 ansj分词器 Stanford分词器 FudanNLP分词器 HanLP分词器
本文的目标有两个:
1、学会使用11大Java开源中文分词器
2、对比分析11大Java开源中文分词器的分词效果
本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断。
11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口:
/**
* 获取文本的所有分词结果, 对比