Spring||Interview
1.依赖注入(DI)(IOC)
对象本身不负责对象的创建和维护,将控制权转交给外部的容器实现,降低程序的耦合度,只提供java方法让容器决定依赖关系,依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象,使用<bean>元素去构造组件时,为id定义一个唯一的名称,通过调用属性的setter方法实现。
以多种方式实现依赖注入,分为构造注入,p命名注入;
构造注入
在applicationContext.xml中使用<constructor-arg> 去定义DAO实现,使用时不分顺序,由index属性指定该位置的索引,提供type属性去区分字符串和基本数据类型的混淆.
P命名注入
P:PropertyName="Variable"
注入数据类型<value/>注入空字符串,<null/>=>null
2.增强类型
异常抛出增强
public static ErrorLogger implements ThrowsAdvice{ void affterThrowing(Method method,Object[]args,Object target,SQLException ex); void afterThrowing(SQLException ex); void afterThrowing(RunntimeException ex);
}
环绕增强
在目标方法前后可以织入增强,其根本就是加强控制权的转交.
public class AroundLogger implements MethodInterceptor{ @Override
Object Invoke(MethodInvocation arg0){
...
try{
arg0.proceed();
}catch(Throwable e){
...
}
}
}
注解定义增强
spring通过@AcpectJ实现注解增强,在AspectJ5新增的功能,
@Aspect
public class BizLogger{
@Before("execution(* biz.Biz.*(..))")
void before(){
} @AfterReturning("execution(* biz.Biz.*(..))")
void afterRuterning(){
...
}
}
@Before将before定义为前置增强,@AfterReturning将afterReturning()定义为后置增强
同时需要在applicationContext.xml定义配置文件
<aop:aspectj-autoproxy/>
<bean class="Class"/>
也可以通过注解定义环绕增强
@Aspect
class AroundLogger{ @Around("execution(..)")
Object aroundLogger(ProceedingJoinPoint jp){
try{
Object result= jp.procees();
}catch(Throwable ex){ }
}
}
3.SessionFactory
通过定义class为org.springframework.orm.hibernate3.LocalSessionFactoryBean指定文件位置后需要为对象提供关系映射文件
<property name="mappingDirectoryLocations">
<list>
<value>classpath:PATH</values>
</list>
</property>
在对DAO业务开发时提供HIbernateTemplate接口进行开发
public class DaoImpl extends HibernateDaosupport implements Dao{ void Update(object entity); void delete(Object entity); Object getClass(Class entityClass,Serializable id); void saveOrUpdate(Object entity); }
4.事务处理
在硬编码中容易产生复杂,spring提供事务处理进行代码与业务分离,降低开发和维护难度通过配置tx和aop进行事务处理操作
通过在bean标签中定义<tx:advice id="" transaction-manager="">定义事务标签,可通过<tx:attributes>进行标签定制事务属性,具有以下标签
propagation:事务传播
- REQUIRED:默认值,如果存在一个事务,则支持当前事务,如果没有创建一个
- SUPPORT:如果存在支持当前事务,如果没有按非事务方式执行
- MANDATORY:存在支持,没有抛出异常
- REQUIRES_NEW 总是开启一个事务,存在挂起,没有新事务执行
- NOT_SUPPORTED 非事务执行,存在挂起
- NEVER:非事务执行
- NESTED:不再在当前活动事务,则创建嵌套事务
isolation:事务隔离级别默认为DEFAULT
read-only:事务是否只读
rollback-for:设置回滚异常
no-rollback-for:设置不回滚异常类型
5.web.xml
ContextLoaderListener
Spring需要提供监听服务来控制容器在web.xml进行创建
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <!-- add listener service -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener-class>
</listener>
OpenSessionInViewFilter
作用把Hibernate Session和一次完整的请求过程绑定,保证在一次请求过程中始终保持一个Session在开启,解决了延迟加载等问题
<fillter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern> </filter-mapping>
<!-- 需要在struts StrutsPrepareAndExecuteFilter前面,否则无法发挥作用-->
6.Bean Scope
除了可以对bean进行注入,也可以指定作用域,决定spring的组建策略,影响程序的运行效率和数据安全主要分为5种
Snigleton :默认值,以单例创建实例,保证实例只有一个,为gc减轻负担
prototype: 每次从容器获取bean时,创建一个实例
request :for Web,针对HTTP请求会创建一个实例
session:web同一个会话共享一个实例,不同的会话使用不同的实例
global Session:仅在Portlet的WEB,同一个全局共享一个实例.
7.JNDI
spring提供饮用JNDI资源的JndiObject'FactoryBean类
<Context>
<Resource name="jdbc/jboa" auth="Container"
type="javax.sql.DataSource"
driverClassName="..."
user-"" password=""
</Context> <!--DataSource -->
class="org.springframework.jndi.JndiObjectFactoryBean">
8.注解SessionFactory
通过定义annotationsessionfactorybean配置注解,是LocalSessionFactoryBean子类,需要进行一下配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation,AnnotationSessionFactoryBean"
> <!-- Annotation PO-->
<property name="annotatedClasses"> <!--loading po class to Scan --> <property name="packagesToScan" value="Entity"/>
9.自动装配
在需要过多的配置量时,可通过自动装配实现autowire进行自动装配,可以配置以下属性
no 不使用自动配置
byType 根据属性自动装配,如果有一个依赖属性类型则自动装配,如果有多个则抛出一场,如果没有匹配bean,属性不会被设置
byName 根据属性名进行配置,找出id与属性的setter方法匹配的bean,找到自动注入
constructor:应用于构造起参数,如果没有找到一致的Bean,则抛出异常.
通过使用default-autoWire进行减少维护注入方式
10.依赖检查
可以使用依赖检查来保证Bean属性正确的设置,通过<dependeny-check>或者default-dependency-check进行设置全局依赖检查.具有相关一下属性
none:不进行依赖检查
obejcts:检查BeanFactory中其他Bean的依赖
sunple 检查原始
all:同时检查
11.注解定义Bean
利用@Component进行映射配置
@Repository 用于标注DAO类
@Service 用于标注业务类
@Controller 用于标注控制器
@Qualifier用于标注按名称匹配方式
@AutoWired进行自动装配
@Scope用与进行作用于匹配
当需要使用注解进行操作需要在xml进行以下配置
1.添加context命名空间
2.标注扫描包中的类
<context-component-scaan base-package="*">
也可以通过注解配置事务处理
<tx:annotation-driven transaction-manager="txManager">
在业务方法中添加@Transactional实现,具有以下特性
1.传播设置PROPEAGATION_REQUIRED
2.隔离级别为ISOLATION_DEFAULT
3.事务为r/w
4.超时默认以来事务处理
Spring||Interview的更多相关文章
- 69 Spring Interview Questions and Answers – The ULTIMATE List--reference
This is a summary of some of the most important questions concerning the Spring Framework, that you ...
- spring mvc 介绍
Spring MVC Tutorial tag. * * If you do not want to deal with the intricities of the noscript * secti ...
- Spring 面试问题 TOP 50
Spring 面试问题 TOP 50 Spring Framework 现在几乎已成为 Java Web 开发的标配框架.那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢? ...
- 200个最常见的JAVA面试问题(附答案)
本文内容: 20个最常见的JAVA面试问题(附答案) 13个单例模式JAVA面试问题(附答案) 说说JVM和垃圾收集是如何工作的(附答案) 说说如何避免JAVA线程死锁(附答案) Java中HashS ...
- 【spring boot Mybatis】报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.newhope.interview.dao.UserMapper.add
报错如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.newhope.i ...
- 【spring boot】mybatis启动报错:Consider defining a bean of type 'com.newhope.interview.dao.UserMapper' in your configuration. 【Mapper类不能被找到】@Mapper 和@MapperScan注解的区别
启动报错: 2018-05-16 17:22:58.161 ERROR 4080 --- Disconnected from the target VM, address: '127.0.0.1:50 ...
- IoC 与 AOP (谈谈你对 Spring 的理解)
一.Spring 实现了工厂模式的工厂类,这个类名为BeanFactory(实际上是一个接口),在程序中通常 BeanFactory 的子类 ApplicationContext. Spring相当于 ...
- mongoDB数据库和Spring MVC的整合
之前一直用到的项目是Spring MVC+maven+mysql的,最近有些数据需要用到mongoDB数据库,现在做一些总结. 第一步:加载jar.maven配置 <!-- mongodb开始 ...
- (C++) Interview in English. - Constructors/Destructors
Constructors/Destructors. 我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成 ...
随机推荐
- react-cli
更新日志: v1.2.0 ...未完待续 v1.1.0 添加editorconfig 配置ESLint 集成prettier 集成 lint-staged 实现细节: 添加editorconfig e ...
- mysql查询包含逗号的数据,并逗号拆分为多行展现
在做系统开发的时候,有可能是由于之前的遗留问题,导致在数据入库的时候,将多个数据以逗号分隔的实行,存储在一条数据中,例如: ID VALUE 1 yang,zheng,song 2 zhao,qian ...
- oracle函数 sys_guid()
[功能]生产32位的随机数,不过中间包括一些大写的英文字母. [返回]长度为32位的字符串,包括0-9和大写A-F [示例] select sys_guid() from dual
- C运行时库函数
C运行时库函数是指C语言本省支持的一些基本函数,通常是汇编直接实现的. API函数是操作系统提供给用户方便设计应用程序的函数,实现一些特定的功能,API函数也是C语言的函数实现的. 他们之间区别是: ...
- Android教程 -07 Activity的任务栈和启动模式
Activity是由任务栈管理的,一般情况下一个应用程序只有一个任务栈. 什么是栈? 栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西 栈的特点就是先进后出, ...
- 一些关于中国剩余定理的数论题(POJ 2891/HDU 3579/HDU 1573/HDU 1930)
2891 -- Strange Way to Express Integers import java.math.BigInteger; import java.util.Scanner; publi ...
- poj 3743 LL’s cake (PSLG,Accepted)
3743 -- LL’s cake 搞了好久都过不了,看了下题解是用PSLG来做的.POJ 2164 && LA 3218 Find the Border (Geometry, PSL ...
- 5 分钟入门 Google 最强NLP模型:BERT
BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...
- 微软的可疑更新DhMachineSvc.exe
最近微软大范围的推出了一个只针对中国的更新,包含了DhMachineSvc.exe,也就是所谓的'微软设备健康助手服务'. 这个更新很神秘,首先这个更新只针对中国区,其次这个更新支持WinXP,第三这 ...
- 2019-10-31-Resharper-去掉注释拼写
title author date CreateTime categories Resharper 去掉注释拼写 lindexi 2019-10-31 9:8:5 +0800 2018-09-04 1 ...