JavaEE -- Spring的创建和使用

1.Spring项目的创建

1.1创建一个 Maven 项目

1.创建一个maven项目
在这里插入图片描述
2.配置一下国内源,
在这里插入图片描述
3.添加 Spring 框架支持(在项目的 pom.xml 文件中添加 Spring 框架的支持):
Spring 项目需要添加的依赖有 spring-context(Spring 上下文)和 spring-beans(管理对象的模块)。

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-framework.version>5.2.10.RELEASE</spring-framework.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
    </dependencies>

4.添加启动类(在 /src/main/java 目录下创建一个启动类):
在这里插入图片描述

1.2 存储 Bean 对象

1.创建好需要的Bean
在这里插入图片描述
2.将Bean注册到Spring容器中
在这里插入图片描述

1.3 获取并使用 Bean 对象

1.创建 Spring 上下文(这里使用 ApplicationContext 作为上下文对象,也可以使用 BeanFactory)

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

2.获取指定的 Bean 对象

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = (User) context.getBean(User.class);
        user.say();
    }
}

获取 Bean 对象的三种方式:

User user = (User) context.getBean(User.class);
User user2 = (User) context.getBean("user");
User user3 = (User) context.getBean("user",User.class);

注意:Spring 中的 Bean 默认是单例模式

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = (User) context.getBean(User.class);
        User user2 = (User) context.getBean("user");
        User user3 = (User) context.getBean("user",User.class);
        user.say();
        user2.say();
        user3.say();
        System.out.println(user);
        System.out.println(user2);
        System.out.println(user3);
    }
}

在这里插入图片描述

2.Spring更简单的读取和存储对象的方式(注解)

2.1 存储 Bean 对象

2.1.1 配置扫描路径

使用注解,无需在存储一个 Bean 对象时,在 Spring 的配置文件中再添加一个注册内容,只要在 Spring 的配置文件中配置一个扫描路径即可实现 Bean 的批量注册。
在beans.xml中添加如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="beans"/>
</beans>

Spring 引入了组件自动扫描机制,它可以在类路径底下,扫描配置的 base-package 包下所有标注了 @Controller , @Service , @Repository , @Component 注解的类,并把这些类纳入进Spring 容器中管理。

2.1.2 注册 Bean 的方式

(1)类注解
@Controller
package beans;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {
    public static void say() {
        System.out.println("user controller");
    }
}

在这里插入图片描述

@Service
@Service
public class UserService {
    public static void say() {
        System.out.println("user service");
    }
}

在这里插入图片描述

@Repository
@Repository
public class UserRepository {
    public void say(){
        System.out.println("user Repository");
    }
}
@Component
@Component
public class UserComponent {
    public void say(){
        System.out.println("user Component");
    }
}
(2)@Configuration
@Configuration
public class UserConfiguration {
    public void say(){
        System.out.println("user Configuration");
    }
}
(3)@Bean(方法注解)
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Getter
@Setter
@ToString
@Configuration
public class User {
    private String username;
    private String password;

    @Bean
    public User user1() {
        User user = new User();
        user.setUsername("user1");
        user.setPassword("111");
        return user;
    }

    @Bean
    public User user2() {
        User user = new User();
        user.setUsername("user2");
        user.setPassword("222");
        return user;
    }
}
public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user1 = (User) context.getBean("user1",User.class);
        User user2 = (User) context.getBean("user2",User.class);
        System.out.println(user1);
        System.out.println(user2);

    }
}

在这里插入图片描述

2.2 获取 Bean 对象

获取 Bean 对象也叫做对象装配或者对象注入,是把对象从容器中取出来放到某个类中。

对象注入的方法:
方法一:属性注入
方法二:构造方法注入
方法三:Setter 注入

2.2.1 属性注入

当前类被 Spring 扫描到时,可以在属性上使用 @Autowired 或 @Resource 注解,会将容器中的Bean对象装配进来。

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    public void getUserService(){
        System.out.println(userService);
    }
}

@Controller
public class UserController {
    @Resource
    private UserService userService;

    public void getUserService(){
        System.out.println(userService);
    }
}

2.2.2 构造方法注入

@Controller
public class UserController {

    private UserService userService;
    @Autowired
    public UserController(UserService userService){
        this.userService = userService;
    }
    
    public void getUSerService(){
        System.out.println(userService);
    }
}

2.2.3 Setter 注入 Bean 对象

(1)使用 @Autowired 注解

@Controller
public class UserController {

    private UserService userService;
    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void getUSerService(){
        System.out.println(userService);
    }

}

(2)使用 @Resource 注解

@Controller
public class UserController {

    private UserService userService;
    @Resource
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void getUSerService(){
        System.out.println(userService);
    }

}

2.2.4 注入指定的 Bean

(1)@Autowired

@Controller
public class UserController {

    @Autowired
    @Qualifier(value = "user1")
    private User user;

    public void printUser(){
        System.out.println(user);
    }

}

(2)@Resource

@Controller
public class UserController {

    @Resource(name = "user2")
    private User user;

    public void printUser(){
        System.out.println(user);
    }

}

3.Bean 的作用域

3.1 singleton

该作用域下的Bean在IoC容器中只存在一个实例
Spring默认选择该作用域

3.2 prototype

每次对该作⽤域下的 Bean 的请求都会创建新的实例

3.3 request

每次 HTTP 请求会创建新的 Bean 实例,类似于 prototype
⼀次 HTTP 的请求和响应的共享 Bean
限定 Spring MVC 中使⽤

3.4 session

在⼀个 HTTP Session 中,定义⼀个 Bean 实例
⽤户会话的共享 Bean,⽐如:记录⼀个⽤户的登陆信息
限定 Spring MVC 中使⽤

3.5 全局作用域 application(了解)

在⼀个 http servlet Context 中,定义⼀个 Bean 实例
Web 应⽤的上下⽂信息,⽐如:记录⼀个应⽤的共享信息
限定 SpringMVC 中使⽤

3.6 websocket(了解)

在⼀个 HTTP WebSocket 的⽣命周期中,定义⼀个 Bean 实例

4.Bean 的原理分析

4.1 Spring 的执行流程

1.启动 Spring 容器(在 main 方法中启动)
2.实例化 Bean(加载 Spring 配置文件,实例化并申请内存)
3.将 Bean 注册到 Spring 中(将添加了和 Spring 注册 Bean 相关的注解的对象存储到容器中)
4.将 Bean 装配到需要的类中

4.2 Bean 的生命周期

1.实例化 Bean(在内存中生成对象)
2.设置 Bean 属性(依赖注入和装配,必须在初始化 Bean 之前,因为初始化的时候可能会用到 Bean 对象)
3.初始化 Bean
4.使用 Bean
5.销毁 Bean

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值