1.Spring框架优点?(面试题)

首先说一下为什么要使用Spring框架:在传统的Java开发中具有高度的耦合性,一个项目中或者一个逻辑功能的实现时,往往一个对象需要依赖很多的对象来完成自己的操作,这样就造成了两个类的依赖关系太强,改一个地方,往往牵扯很多类牵扯大量的代码。 此时Spring就被开发出来, 它可以管理对象和对象之间的依赖关系,我们不需要自己建立对象,把这部分工作全部转交给容器完成,具有低耦合,对代码没有侵略性,对服务器没有依赖性特点的框架举个例子:我们在没有使用Spring之前,在service层引用Dao层的对象时,需要在servicenew一个Dao层的对象,这样曾与层之间的依赖性就很严重。而使用Spring框架之后,只需要在xml文件中配置就可以了,至于对象是怎么创建的,关系是怎么组合的都交给了spring框架去实现。

Spring框架优点:

方便解耦,简化开发:

Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理(代码没有入侵性)

AOP编程的支持:

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能(便于功能扩展)

声明式事务的支持:

只需要通过配置就可以完成对事务的管理,而无需手动编程

方便程序的测试:

SpringJunit4支持,可以通过注解方便的测试Spring程序

方便集成各种优秀框架:

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:StrutsHibernateMyBatisQuartz等)的直接支持

降低JavaEE API的使用难度:

Spring JavaEE开发中非常难用的一些APIJDBCJavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

--------笔记

2. IOCDI分别是什么?区别?(面试题)

IOC控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的"控制反转"就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。

DISpring通过控制反转(IOC)的技术促进了松耦合。当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象,是容器在对象初始化时不等对象请求就主动将依赖传递给它。

简单说就是:IoC(控制反转):本来需要你自己new对象,现在交给spring容器帮你new对象,权利从你手里反转到容器手里了

DI(依赖注入):(依赖)就是依赖spring提供的容器,(注入)类中属性的值通过容器注入进去,或者通过引用为属性注入值

通过IOC反转控制DI依赖注入完成各个层之间的注入,使得层与层之间实现完全脱耦,增加运行效率利于维护。

3.Bean的实例化方式?

1. 使用构造器实例化

这种实例化的方式可能在开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现。

要注意的是:要实例化的类中如果有构造器的话,一定要有一个无参构造器。

 

 

2. 使用静态工厂方法实例化

通过这种方式进行实例化就要具备两个条件:

(一)、要有工厂类及其工厂方法;(二)、工厂方法是静态的。

 

 

  id是实例化的对象的名称,class是工厂类,也就实现实例化类的静态方法所属的类,factory-method是实现实例化类的静态方法。

 

3. 使用实例化工厂方法实例化

这个方法和静态工厂方法不同之处在于使用该实例化方式工厂方法不需要是静态的,但是在spring的配置文件中需要将工厂进行配置,还需要配置bean

 

 

 这里需要配置两个bean,第一个bean使用的构造器方法实例化工厂类,第二个bean中的id是实例化对象的名称,factory-bean对应的被实例化的工厂类的对象名称,也就是第一个bean的id,factory-method是非静态工厂方法。

 

4.Bean的属性注入方式有哪些?

1. 构造方法注入

假设我有一个User4,如下:

 

User4中有一个变量叫做username,我希望通过构造方法给它注入值,那我在User4中提供相应的构造方法即可,然后在Spring的配置文件中做如下配置即可:

 

 

2. set方法注入

假设我有一个User5,如下:

 

通过set方法注入,那么在User5中我们首先要提供set方法,然后在Spring配置文件中做如下配置即可:

 

 

3. p名称空间注入

首先,我们需要在Spring配置的bean节点中添加p名称空间,如下:

 

现在假设我有一个User6,如下:

 

User6中有一个username属性,为属性提供set方法,在配置文件中通过p名称空间进行注入:

 

直接在bean节点中通过p:username执行相应的值即可。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐