8月1日SpringBoot学习笔记

发布于:2024-08-02 ⋅ 阅读:(32) ⋅ 点赞:(0)

 
今天内容:配置maven    搭建springboot项目   约定大于配置  IOC  DI   常用注解  springbean的作用域     springbean的生命周期


Springboot

创建springboot项目

        maven项目添加springboot变成的springboot项目

具体步骤参考:http://t.csdnimg.cn/2NTuKhttp://t.csdnimg.cn/nQp9T

约定大于配置

        也可以叫做约定优于配置,也称作按约定编程,是一种软件设计范式,指在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。例如注解就是约定,直接使用就行,没特殊要求就不用配置代码实现。

IOC  

        IOC==控制反转:容器和代码之间的控制权反转,代码中不需要明文调用来得到对象,只需要声明该类需要什么类型的对象即可

        在项目运行阶段,程序中需要很多对象来完成相关业务,springboot提供了很多注解标注类,,让spring管理这些类的对象的生命周期。如:

@Controller(前台控制接收) 返回地址信息  

@RestController  直接返回给客户端

@Service(业务类)

@Repository(Dao数据访问数据库)  

@Component(其他功能类)  

@Bean(指示一个方法生成一个bean)
  

        spring提供了IOC的方式方便获取该对象:

package com.easy.common;

import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
public class TestA {

	//面试题
	//spring Bean的作用域//@Scope(value= "")
	//singleton  单例模式    一个对象    默认
	//prototype  原型模式    每次使用类都需要一个新的对象
	//request  web项目中请求作用域     每一次请求都会创建一个新的对象中    要求使用的本类的类也要设置
	//session  每次会话(从访问服务器到结束)都会创建一个新的对象,下线或者默认30分钟没有动作就失效
	//GlobalSession   全局的
	public void test() {
		System.out.println(this);
		System.out.println("test method");
	}
}
package com.easy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.easy.common.TestA;

@Controller
public class EasyAController {

	@Autowired
	TestA testa;
	
	@RequestMapping("testa")
	public String testA() {
		testa.test();
		return "EasyA method";
	}
	
	
}

DI

        依赖注入DI   通过识别关系注入依赖对象

package com.easy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.easy.common.TestA;
import com.easy.service.EasyService;

@RestController
public class EasyController {

	//该类中需要EasyService类的对象
	//在这个类中只需要声明依赖EasyService这个类就行
	//不需要通过代码获取EasyService类的对象
	
	//依赖注入DI   通过识别关系注入依赖对象

	//@Autowired告诉spring说明需要这个类的对象,spring自动注入
	@Autowired
	EasyService easyS;
	
	@RequestMapping("testb")
    @Autowired		
	public String testB(TestA testa) {
		testa.test();
		return "Easy method";
	}
	
	@RequestMapping("easya")
	public String easya() {
		System.out.println(easyS.toString());
		return "new Service";
	}
	
	@RequestMapping("hello")
	public String hello() {
		return "孩子们我回来了!";
	}
	
}

springbean的作用域    

        在Spring框架中,bean的作用域决定了bean的生命周期和Spring容器如何创建bean实例。以下是Spring支持的主要bean作用域:

1. singleton(单例):
        默认作用域。对于在Spring容器中定义为singleton的bean,容器将只创建一个bean实例。无论多少次请求,总是返回同一个实例。

2. prototype(原型):
        对于定义为prototype的bean,每次请求都会创建一个新的bean实例。

3. request:
        每次HTTP请求都会创建一个新的bean,该bean仅在当前HTTP请求内有效。仅适用于Web应用程序中。

4. session:
        每次HTTP会话都会创建一个新的bean,该bean仅在当前HTTP会话内有效。仅适用于Web应用程序中。(从访问服务器到结束;主动或被动下线 或者 默认30分钟没有动作就结束)

5.  global Session:
       在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。同样只有在Web应用中使用Spring时,该作用域才有效。

使用@Scope注解:
        可以通过@Scope注解指定bean的作用域,例如:

@Controller
@Scope("prototype")
public class MyController {
    // ...
}



springbean的生命周期

        bean创建-->初始化-->销毁 的过程,bean的生命周期由容器进行管理,我们可以自定义bean的初始化和销毁方法来满足我们的需求,当容器在bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法。

1.Spring 对bean 进行实例化。

2.Spring 将值和bean的引用注入到bean对应的属性中。

3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()  方法。       (实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)

4.如果bean 实现了BeanFactoryAware接口,Spring将调用setBeanFactory() 方法,将BeanFactory容器实例传入。     (实现BeanFactoryAware 主要目的是为了获取Spring容器,如Bean通过Spring容器发布事件等)

5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext() 方法,将bean所在的应用上下文的引用传入进来。(作用与BeanFactory类似都是为了获取Spring容器,不同的是Spring容器在调用setApplicationContext方法时会把它自己作为setApplicationContext 的参数传入,而Spring容器在调用setBeanDactory前需要程序员自己指定(注入)setBeanDactory里的参数BeanFactory )

6.如果bean实现了BeanPostProcessor接口,Spring将调用它们postProcessBeforeInitialization() 方法     (作用是在Bean实例创建成功后对进行增强处理,如对Bean进行修改,增加某个功能)

7.如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用。

8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization() 方法。    (作用与6的一样,只不过6是在Bean初始化前执行的,而这个是在Bean初始化后执行的,时机不同 )

9.此时, bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁。

10.如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。