【JavaEE案例】spring中的Bean的管理

【案例介绍】

(1)Bean的装配方式之基于注解的装配。

(2)Bean的生命周期。

 【案例实现】

  • 创建项目

  • 引入相关依赖:在pom.xml文件中加载Spring依赖包。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>userManager</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.16</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>

</project>

1.1 在src/main/resources目录下创建applicationContext.xml,在该文件中引入Context约束并启动Bean的自动扫描功能。

<?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
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 使用 context 命名空间 ,在配置文件中开启相应的注解处理器 -->
    <context:component-scan base-package="com.itheima" />
</beans>

1.2 定义实体类

在com.itheima包下新建entity包,在entity包下新建User实体类。

package com.itheima.entity;

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

@Component("user")
@Scope("singleton")

public class User {
    @Value("1")
    private int id;
    @Value("张三")
    private String name;
    @Value("123")
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String toString(){
        return "id="+id+",name="+name+",password="+password;
    }
}

1.3 编写DAO层

在com.itheima包下创建dao包,在dao包下创建接口UserDao作为数据访问层接口,并在UserDao接口中声明save()方法,用于查询User实体的对象信息。

package com.itheima.dao;

public interface UserDao {
    public void save(); //用于查询user实体的对象信息
}

在com.itheima.dao包下创建UerDaoImpl作为UserDao接口的实现类,并在UerDaoImpl类中实现UserDao接口中的save()方法。

package com.itheima.dao;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Repository;
import com.itheima.entity.User;

//使用@Repository注解将UserDaoImpl类标识为Spring中的Bean
@Repository("userDao")

public class UserDaoImpl implements UserDao {
    public void save(){
        //代码加载applicationContext.xml配置文件
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        //User实例化
        User user=(User) applicationContext.getBean("user");
        //打印实例化后的user和提示信息
        System.out.println(user);
        System.out.println("执行UserDaoImpl.save()");
    }
}

1.4 编写Service层

在com.itheima包下新建service包,在service包下创建UserService接口作为业务逻辑层接口,并在UserService接口中定义save()方法。

package com.itheima.service;

public interface UserService {
    public void save();
}

在com.itheima.dao包下创建UserServiceImpl作为UserService接口的实现类,并在UserServiceImpl类中实现UserService接口中的save()方法。

package com.itheima.service;

import com.itheima.dao.UserDao;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

//使用@Service注解将UserServiceImpl类标识为Spring中的Bean
@Service("userService")

public class UserServiceImpl implements UserService {
    //使用@Resource注解注入UserDao
    @Resource(name="userDao")
    private UserDao userDao;
    public void save(){
        this.userDao.save();
        System.out.println("执行UserServiceImpl.save()");
    }
}

1.5 编写Controller层

在com.itheima包下新建controller包,在service包下创建UserController类作为控制层。

package com.itheima.controller;

import org.springframework.stereotype.Controller;
import com.itheima.service.UserService;
import javax.annotation.Resource;

//使用Controller注解将UserController类标识为Spring中的Bean
@Controller

public class UserController {
    //使用@Resource注解注入UserService
    @Resource(name="userService")
    private UserService userService;
    public void save(){
        this.userService.save();
        System.out.println("执行UserController.save()");
    }
}

1.6 编写测试类AnnotationTest.java

package com.itheima;

import com.itheima.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnotationTest {
    public  static  void main (String[] args){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserController userController = (UserController)  applicationContext.getBean("userController");
        userController.save();

    }
}

2.1 在com.itheima包下创建Student类,在类中定义id和name字段,并使用@PostConstruct指定初始化方法,使用@PreDestroy指定Bean销毁前的方法。

package com.itheima;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component("student")

public class Student {
    @Value("1")
    private String id;
    @Value("张三")
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @PostConstruct
    public  void init(){
        System.out.println("Bean对象的初始化完成,调用init()的方法");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("Bean销毁调用destroy()方法");
    }
    public String toString(){
        return "id="+id+",name="+name;
    }
}

2.2 在src/main/resources目录下创建applicationStudent.xml,在该文件中引入Context约束并启动Bean的自动扫描功能。

<?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
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 使用 context 命名空间 ,在配置文件中开启相应的注解处理器 -->
    <context:component-scan base-package="com.itheima" />
</beans>

2.3 编写测试类StudentTest.java

package com.itheima;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class StudentTest {
    public static  void main (String[] args){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationStudent.xml");
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student);
        AbstractApplicationContext ac=(AbstractApplicationContext)  applicationContext;
        ac.registerShutdownHook();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_66697650/article/details/130169361