本文介绍: Bean是在Spring注册的Java类,可以看做是添加到Spring容器里的一个管理对象。只有通过将Java注册为其中的一个Bean时,也即是getBean()过程,才能使得Spring对其进行下一步管理。本期文章主要是关于Bean的基本装配的了解,以及基于注解实现实例讲解,对于Spring的运用也有更加深刻的理解,下次再见!

—–持续更新Spring入门系列文章—–

如果你也喜欢Java和算法,欢迎订阅专栏同学交流

你的点赞关注评论、是我创作的动力!

——-希望我的文章对你有所帮助——–

前言在前篇文章当中我们已经大概了解了Spring基本原理简单实例编写测试,那么本篇将对Spring对于Bean的管理开展进一步讲解和运用。

目录

一、什么是Bean?

1.1  Bean的配置

1.2 Bean的常用子元素

二、实例工厂实例化

2.1 引入pom依赖

2.2 创建一个类

2.3 创建工厂

 2.4 配置applicationContext

2.5 工厂实例的测试类

2.6 测试结果

三、Bean的作用域

四、装配方式

4.1 基于XML的setter的注入

4.2 基于XML的构造方法的注入

4.3 基于注解的装配

五、注解实例

5.1 编写基本类

5.2  编写Dao层接口

5.3 编写Dao层实现类

5.4 编写ServiceDao层

5.5 编写Service实现类

5.6 编写Controller类

5.7 编写测试类

5.8 测试结果

六、总结


一、什么是Bean?

        Bean是在Spring注册的Java类,可以看做是添加到Spring容器里的一个管理对象。只有通过将Java类注册为其中的一个Bean时,也即是getBean()过程,才能使得Spring对其进行下一步管理。

1.1  Bean的配置

属性 描述
id 即Bean对应唯一标识符
name 可以多个名称,用逗号隔开,即代表Bean的内涵或作用
class 即具体实现类,一般为对象的全路径
scope Bean实例作用范围,如singletonprototyperequestsession

1.2 Bean的常用子元素

元素 描述
<constructor-arg>
<property>
<value>

上述两种注入方式对应的子元素属性参数赋值

<ref> (同上)

二、实例工厂实例

        工厂实例化,实际上也是将工厂类做为一个Bean注册到Spring容器中通过控制工厂类来实现对于实例创建接下来演示一个实例工厂实例可以让我们更好的了解工厂模式在Spring中的运作规。

2.1 引入pom依赖

代码

2.2 创建一个

package com.itheima;
public class Bean1 {
    public Bean1() {
        System.out.println("这是Bean1!");
    }
}

2.3 创建工厂

        创建一个工厂,构造方法显示当前实例正在生成,以及创建一个生成类的方法

package com.itheima;

public class MyBeanFactory {
    public MyBeanFactory()
    {
        System.out.println("bean工厂实例化中!");
    }
    public Bean1 createBean()
    {
        return new Bean1();
    }

}

 2.4 配置applicationContext

        注意此处将工厂类注册为一个Bean,填写class后,将再次把工厂类作为一个Bean,使用factorybean来标明工厂类,且已factorymethod标明工厂方法

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="MybeanFactory" class="com.itheima.MyBeanFactory"></bean>
        <bean id="bean1"  factory-bean="MybeanFactory" factory-method="createBean">
        </bean>

</beans>

2.5 工厂实例的测试

        使用ApplicationContext作为Spring的容器,将注册的Bean注入,再通过获取Bean来实例化工厂类,以及自动实现工厂方法

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

public class Test {
    public static void main(String args[])
    {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationBean1.xml");
        System.out.println(applicationContext.getBean("bean1"));
    }
}

2.6 测试结果

三、Bean的作用域

作用域 描述
singleton 单例模式,实际只创建一个实例
prototype 原型模式,每次请求都产生一个新的实例
request 作用于Web,每一个HTTP请求都会有实例
session 作用于Web,每一个HTTPSessioon请求都会有一个实例
global session 作用于Web,限定为HTTPSession生命周期

四、装配方式

4.1 基于XML的setter的注入

即上文中提到的setXX()以及getXX()的方法来进行赋值方法,较为容易理解

4.2 基于XML的构造方法注入

通过构造方法来对类中成员变量进行直接赋值方法

4.3 基于注解装配

  当一个项目的Bean过多时,通过XML的装配方式,会使得applicationContext文件内容较为臃肿,那么此时就可以用到注解解决相关问题

以下是常用注解

注解 描述
@Component 即一个普通Bean,作用于任何层次
@Controller 即控制组件Bean,用于控制层
@Service 业务逻辑Bean,用于业务
@Repository 数据访问Bean,用于数据访问
@Scope 即Bean实例的作用域
@Value 即Bean实例的注入
@Autowired 自动配对
@Resource 指要注入对象
@PostConstruct 指实例初始化完成之后调用方法
@Qualifier 自动装配的对象名称,通常与@Autowired联用
@PreDestory 指实例销毁调用方法

五、注解实例

结构图

5.1 编写基本

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("Zhuang San")
    private String name;
    @Value("1234")
    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 void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", password='" + password + ''' +
                '}';
    }
}

5.2  编写Dao层接口

package com.itheima.Dao;
public interface UserDao {
    public void save();
}

5.3 编写Dao层实现

package com.itheima.Dao;
import com.itheima.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
    public void save(){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext2.xml");
        User user=(User) applicationContext.getBean("user");
        System.out.println(user);
        System.out.println("Executing UserDaoImpl.save() ");
    }

}

5.4 编写ServiceDao层

package com.itheima.Service;
public interface UserService {
    public void save();
}

5.5 编写Service实现

package com.itheima.Service;
import javax.annotation.Resource;
import com.itheima.Dao.UserDao;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService{
    @Resource(name="userDao")
    private UserDao userDao;
    public void save(){
        this.userDao.save();
        System.out.println("Executing UserServiceImpl.save()");
    }
}

5.6 编写Controller类

package com.itheima.Controller;
import com.itheima.Service.UserService;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
@Controller
public class UserController {
    @Resource(name="userService")
    private UserService userService;
    public void save(){
        this.userService.save();
        System.out.println("Executing UserController.save() ");
    }

}

5.7 编写测试类

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

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

5.8 测试结果

六、总结

        本期文章主要是关于Bean的基本装配的了解,以及基于注解实现实例的讲解,对于Spring的运用也有更加深刻的理解,下次再见!

感谢爱学习的你看到最后,点个赞、关注支持一下吧!

原文地址:https://blog.csdn.net/m0_55278347/article/details/127933306

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_37204.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注