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的更多相关文章

  1. 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 ...

  2. spring mvc 介绍

    Spring MVC Tutorial tag. * * If you do not want to deal with the intricities of the noscript * secti ...

  3. Spring 面试问题 TOP 50

    Spring 面试问题 TOP 50 Spring Framework 现在几乎已成为 Java Web 开发的标配框架.那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢? ...

  4. 200个最常见的JAVA面试问题(附答案)

    本文内容: 20个最常见的JAVA面试问题(附答案) 13个单例模式JAVA面试问题(附答案) 说说JVM和垃圾收集是如何工作的(附答案) 说说如何避免JAVA线程死锁(附答案) Java中HashS ...

  5. 【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 ...

  6. 【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 ...

  7. IoC 与 AOP (谈谈你对 Spring 的理解)

    一.Spring 实现了工厂模式的工厂类,这个类名为BeanFactory(实际上是一个接口),在程序中通常 BeanFactory 的子类 ApplicationContext. Spring相当于 ...

  8. mongoDB数据库和Spring MVC的整合

    之前一直用到的项目是Spring MVC+maven+mysql的,最近有些数据需要用到mongoDB数据库,现在做一些总结. 第一步:加载jar.maven配置 <!-- mongodb开始 ...

  9. (C++) Interview in English. - Constructors/Destructors

    Constructors/Destructors. 我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成 ...

随机推荐

  1. SGU 101 Domino【欧拉路径】

    题目链接: http://acm.sgu.ru/problem.php?contest=0&problem=101 题意: N个多米诺骨牌,每个骨牌左右两侧分别有一个0~6的整数(骨牌可以旋转 ...

  2. mysql带有子查询的like查询

    SELECT * FROM by_app_categories WHERE c_name LIKE CONCAT('%', (SELECT `name` FROM b_catelist WHERE t ...

  3. Creating a Pulsing Circle Animation

    原文 https://www.kirupa.com/animations/creating_pulsing_circle_animation.htm Outside of transitions th ...

  4. oracle函数 round(d1[,c1])

    [功能]:给出日期d1按期间(参数c1)四舍五入后的期间的第一天日期(与数值四舍五入意思相近) [参数]:d1日期型,c1为字符型(参数),c1默认为j(即最近0点日期) [参数表]:c1对应的参数表 ...

  5. python 实现A*算法

    A*作为最常用的路径搜索算法,值得我们去深刻的研究.路径规划项目.先看一下维基百科给的算法解释:https://en.wikipedia.org/wiki/A*_search_algorithm A ...

  6. CDN WAF功能开放公测 提升网络应用安全性能

    阿里云CDN WAF功能,是指CDN融合了云盾Web应用防火墙(Web Application Firewall,简称 WAF)能力,在CDN节点上提供安全防护的功能,该功能目前已经开放公测. WAF ...

  7. Best Open Source Software

    Best Open Source Software Open Source, Software, Top The promise of open source software is best qua ...

  8. vscode settings.json配置

    // 将设置放入此文件中以覆盖默认设置 { "editor.fontSize": 18, "editor.tabSize": 2, "editor.m ...

  9. react项目安装及运行

    博客地址 :https://www.cnblogs.com/sandraryan/ 安装node ,有就跳过. node.js官网:https://nodejs.org/en/ 终端用node -v ...

  10. 基于LIVE555的RTSP QoS实现

    如何从OnDemandServerMediaSubsession类以及继承类对象中获取RTCP信息(句柄) OnDemandServerMediaSubsession.cpp void StreamS ...