教你一招!如何通过Java面试(Spring篇)

1.Spring 提供了对IOC 良好支持,IOC 是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。IOC 也称为DI(Depency Injection),什么叫依赖注入呢?

答:有如下代码,在Spring如何完成依赖注入功能:

Class Programmer
{
Computer computer = null;
public void code()
{
//Computer computer = new IBMComputer();
//Computer computer = beanfacotry.getComputer();
computer.write();
}
public void setComputer(Computer computer)
{
this.computer = computer;
}

第一个直接依赖于目标类,第二个把依赖转移到工厂上,第三个彻底与目标和工厂解耦了。

在spring 的配置文件中配置片段如下:

<bean id=”computer” class=”cn.itcast.interview.Computer”>
</bean>
<bean id=”programmer” class=”cn.itcast.interview.Programmer”>
<property name=”computer” ref=”computer”></property>
</bean>
2.谈谈您对于Spring的Aop的理解?

答:Spring 提供了对AOP 技术的良好封装, AOP 称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。实现AOP 功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在,JDK 中采用Proxy 类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLI B。在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice 对象进行提供,显然要创建出代理对象,至少需要目标类和Advice 类。

spring 提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop 功能,例如:

<bean id=”proxy” type=”org.spring.framework.aop.ProxyBeanFactory”>
<property name=”target” ref=””></property>
<property name=”advisor” ref=””></property>
</bean>
3.Spring中BeanFactory与AplicationContext有什么区别?
  • BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。
  • ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:a.国际化b.资源访问c.事件传递。
4.Spring的注入方式?

答:Spring依赖注入的类型主要为:setter注入和构造器注入

public class MyBean
{
      String name;
      public void setName(String name){
          this.name = name
}

创建bean的实例然后设置属性的值,Spring的配置文件如下:

<bean id="bean1">
<property name="name" value="mahaha" />
</bean>

构造器注入:构造器注入中,需要提供对应的构造方法:

public class MyBean{
    private name;
    public MyBean(String name){
       this.name = name;}

在Spring的配置文件如下:

<bean id="mybean">
     <constructor-arg>
       <value>MyBean Value</value>
    </constructor-arg>
  </bean>
  }
5.请简述在Spring框架中几种事务处理方式的优缺点?

答:在Spring框架中事务处理有三种方式:

  • 用原始的transactionfactorybean的,代理dao事务处理。这种方式在Spring2.0之前的版本中使用,完全使用Spring Aop的API实现,理解起来比较容易,但使用起来比较麻烦。
  • 用aop:config声明要进行事务增强的切面,用tx:advice声明具体方法的事务属性,及应用到的事务管理器,此方法的优势比较明显,使用比较方便,但是缺点是不容易理解,配置容易失误,其参考代码如下:
<tx:advice id="txadvice" transaction-manager="txmanager">
<tx:attributes>
<tx:method name="add*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!--用aop:config声明要进行事务增强的切面-->
<aop:config>
<aop:pointcut id="servicemethod"
expression="execution(* com.service..add*(..))"/>
<aop:advisor pointcut-ref="servicemethod" advice-ref="txadvice"/>
</aop:config>
  • 使用@transactional注解配置声明事务,配置比较方便,程序员只要在service层代码设置即可实现。缺点就是后期调整很烦,当然此方式在注解比较流行的今天也被很多团队使用。

其代码示例如下:

<!--注解式事务配置驱动-->
<tx:annotation-driven transaction-manager="txmanager" proxy-target-class="true"/>
<!--业务类bean的实现类标注了@transactional注解,所以会被
tx:annotation-driven注解驱动自动织入事务增强-->
<bean id="userservice" class="com.service.impl.userserviceimpl">
<property name="userdao" ref="userjdbcdao"/>
</bean>
6.SSH 三大框架 各个原理,相互之间怎样的关系?
  • Struts框架主要处理用户请求和响应处理后的结果,如:提供处理用户提交的数据和数据类型转换以及在前台显示用户数据;

  • Spring框架主要提供依赖注入,是的各层的对象之间关联关系解耦,并且在Spring框架提供更大的事务支持。

  • Hibernate框架提供对象的持久化操作,就是面向对象的方式往数据库里面进行增删改查。在Spring框架中提供对Hibernate框架的支持,如HibernateTemplate,是的在使用Hibernate更加方便。

    ssh框架关系如图:
    教你一招!如何通过Java面试(Spring篇)

上一篇:【自学php】第一天-macbook上配置php


下一篇:Imprecise Computer - ( 思维 / 递推 )