1、Spring是什么?特点是什么?优势是什么?
spring:
1.是一个高度灵活的轻量级的开源框架,其目的是减低企业级应用开发的复杂度。
2.是一个容器,因为它包含并且管理应用对象的生命周期和配置。如对象的创建、销毁、回调等
特点
1.轻量级:低侵入式设计,代码污染极低,非侵入性;
2.框架:可以集成mybatis,hibernate等框架;
3.控制反转(IOC):通过控制反转实现解耦,大大降低代码量;
4.面向切面编程(AOP):在事务处理、日志管理、缺陷控制、异常处理这些板块有明显的优势
5.事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务
6.高度并发性,并不强制应用完全依赖spring。
7.独立性:独立于各种应用服务器;
8.容器提供单例模式的支持;
优点:
1、提供了一种管理对象的方法、可以把中间层对象有效的组织起来。一个完美的框架"粘合剂";
2、采用了分层结构,可以增量引入到项目中去;
2、耦合是什么意思
既然spring中的优点之中有解耦的特点,只有知道耦合才可以进行相应的解耦;
在开发中,可能会写很多的类,而有些类之间不可避免的产生依赖关系,这种依赖关系称之为耦合。有些依赖关系是必须的,有些依赖关系可以通过优化代码来解除的。
3.Spring的核心是什么?
1.控制反转(IOC):传统的JAVA开发模式中,当需要一个对象时,我们使用new活着getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用工厂模式为我们创建了所需要的对象,不需要我们自己去创建了,直接调用Spring提供的对象就可以了,这就是控制反转。
2.面向切面编程(AOP):在面向对象编程(OOP)中,我们将事务纵向抽成一个个的对象,而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制,事务管理,日志记录等公用操作处理的过程,就是面向切面编程的思想。
4.IOC什么含义
Inversion of Control:控制权的转移,创建对象的权利由应用程序转移到容器称为控制反转。
Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。
5.DI是什么?和IOC有什么区别 ?
依赖注入(Dependecy Injection DI)和控制反转(Inversion of Control IOC)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
6.注入属性的方式
注入属性的方式有两种setter和构造方法注入
实体类:
@Getter @Setter public class Man { private String userCar; private Integer age; private String manName; }
构造(关键字property)
<bean id="man" class="com.openlab.pojo.Man" >
<property name="age" value="25"></property>
<property name="manName" value="张三"></property>
<property name="userCar" value="宾利"></property>
</bean>
setter注入(关键字)
实体类
@Getter
@Setter
public class Man {
private String userCar;
private Integer age;
private String manName;
public Man(String userCar, Integer age, String manName) {
this.userCar = userCar;
this.age = age;
this.manName = manName;
}
}
xml文件
<bean id="man" class="com.openlab.pojo.Man" >
<constructor-arg name="age" value="5"></constructor-arg>
<constructor-arg name="manName" value="张三"></constructor-arg>
<constructor-arg name="userCar" value="宾利"></constructor-arg>
</bean>
7.如何注入集合属性
xml文件
<bean id="testList" class="com.openlab.pojo.testList">
<property name="inte">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
<property name="man">
<list>
<ref bean="man"></ref>
<ref bean="man"></ref>
<ref bean="man"></ref>
</list>
</property>
<property name="testTset">
<set>
<value>5</value>
<value>7</value>
<value>8</value>
</set>
</property>
<property name="testMap">
<map>
<entry key="ss" value="aa"></entry>
<entry key="qq" value="ff"></entry>
<entry key="vv" value="kk"></entry>
</map>
</property>
</bean>
实体类
import java.util.List;
import java.util.Map;
import java.util.Set;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class testList {
private List<Integer> inte;
private List<Man> man;
private Set testTset;
private Map<String,String> testMap;
}
8.spring管理bean的作用域
9.Spring管理bean的生命周期:
1:调用无参方法
2:set方法调用
3:init()方法前被调用
4:init()方法被调用
5:init()方法后被调用
6:对象可以正常使用
6:destroy()方法被调用
10.bean中的两种方式
单例:关键字:
scope="singleton"
<bean id="man" class="com.openlab.pojo.Man" scope="singleton">
<constructor-arg name="age" value="5"></constructor-arg>
<constructor-arg name="manName" value="张三"></constructor-arg>
<constructor-arg name="userCar" value="宾利"></constructor-arg>
</bean>
非单例:关键字:
scope="prototype"
<bean id="man" class="com.openlab.pojo.Man" scope="singleton">
<constructor-arg name="age" value="5"></constructor-arg>
<constructor-arg name="manName" value="张三"></constructor-arg>
<constructor-arg name="userCar" value="宾利"></constructor-arg>
</bean>