1. 简介一下Spring框架。
答:Spring框架是一个开源的容器性质的轻量级框架。主要有三大特点:容器、IOC(控制反转)、AOP(面向切面编程)。
2. Spring框架有哪些优点?谈谈你的看法。
答:
Sping 框架的核心就是IOC控制反转和DI依赖注入,并通过这两方面实现松耦合。
Spring框架主要有三大优点:
(1) 容器。Spring框架是一个容器,能够管理项目中的所有对象。
(2) IOC(控制反转)。Spring将创建对象的方式反转了,从程序员自己创建反转给了程序创建。
(3) AOP(面向切面)。面向切面编程,就是将纵向重复的代码横向抽取出来。Spring框架应用了面向切面的思想,主要体现在为容器中管理的对象生成动态代理对象。
3. 什么是IOC?
答:IOC:控制反转,指得是将对象的创建权反转给Spring。作用是实现了程序的解耦合。、
4. 什么是DI?
答:DI:依赖注入,需要有IOC环境,在Spring创建Bean对象时,动态的将依赖对象注入到Bean对象中去。依赖注入最大的好处就是解耦合。
5. Spring框架中属性注入有哪几种方式:
答:Spring中的输入注入方式包括set方法注入、构造函数注入、p名称空间注入、spel注入,除此之外,还包括复杂方式注入,如数组、List、Map、Properties等属性的注入。
使用属性的setter方法注入 ,这是最常用的方式;
使用构造器注入;
注解注入
接口注入
属性注入即通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式。
依赖注入的本质就是装配——自动装配:spring可以使用xml和注解来进行自动装配。自动装配就是开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成,自动装配就是为了将依赖注入“自动化”的一个简化配置的操作
setter 方法注入 public class
Student{ public String name; public List scource; get、set器。。。 } Public class
Teacher{ Private Student student; //添加student的set方法 Public
setStudent(Student student){ This.student=student; } public static void main(String [] arg){
System.out.println(student); } } Xml配置 <!—就将student注入到teacher的属性里了--> <bean id=”student”
class=”…”/> <bean id=”theacher”
class=”…”> <property name=”student” ref=”student”/> </bean> |
构造器注入 public class
Student{ public String name; public List scource; get、set器。。。 } Public class
Teacher{ Private Student student; //这里不需要student的set器 //需要Teacher构造器 Public void Teacher(Sudent student){ This.student=student; } public static void main(String [] arg){
System.out.println(student); } } Xml配置 <bean id=”student”
class=”…”/> <bean id=”teacher”
class=”…”> <constructor-arg
index=”0” ref=”student”/> </bean> |
注解注入 @resource(“”) 按类型/@Autowrited按名称寻找 Xml配置 <context:annotation-config/> <context:component-scan
base-package=””/> |
@Autowired注解是byType类型的
@Resouce注解, 这个注解也是java ee的,是byName类型的,
常用注解
@Component :标准一个普通的spring Bean类。
@Repository:标注一个DAO组件类。
@Service:标注一个业务逻辑组件类。
@Controller:标注一个控制器组件类。
这些都是注解在平时的开发过程中出镜率极高,@Component、@Repository、@Service、@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型。@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。
@RequestMapping 既可以作用在类级别,也可以作用在方法级别。当它定义在类级别时,标明该控制器处理所有的请求都被映射到路径下。
@RequestMapping中可以使用 method 属性标记其所接受的方法类型,如果不指定方法类型的话,可以使用 HTTP GET/POST 方法请求数据,但是一旦指定方法类型,就只能使用该类型获取数据。
@RequestParam :将请求的参数绑定到方法中的参数上,有required参数,默认情况下,required=true,也就是改参数必须要传。如果改参数可以传可不传,可以配置required=false。
@PathVariable中的参数可以是任意的简单类型,如int, long, Date等等。
@RequestBody : @RequestBody是指方法参数应该被绑定到HTTP请求Body上。@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
@ResponseBody : @ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTP response body中。
https://blog.csdn.net/justry_deng/article/details/80972817
@RestController :控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@ResponseBody。
servlet三大作用域:request,session,application
request < session < application
1. request
request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。
用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。
方法:request.setAttribute(); request.getAttribute(); request.removeAttribute(); request.getParameter().
2. session
服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。
会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。
用处:常用于web开发中的登陆验证界面(当用户登录成功后浏览器分配其一个session键值对)。
方法:session.setAttribute(); session.getAttribute(); session.removeAttribute();
3. Application(ServletContext)
作用范围:所有的用户都可以取得此信息,此信息在整个服务器上被保留。Application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据。ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb应用只创建一个ServletContext对象,所有的客户端在访问服务器时都共享同一个ServletContext对象;ServletContext对象一般用于在多个客户端间共享数据时使用;