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

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

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

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

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

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

目录

一、什么是Bean?


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

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

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

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

<ref> (同上)

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

代码

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

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

package com.itheima;

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

}

        注意此处将工厂类注册为一个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>

        使用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"));
    }
}

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

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

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

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

以下是常用注解

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

结构图

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 + ''' +
                '}';
    }
}
package com.itheima.Dao;
public interface UserDao {
    public void save();
}
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() ");
    }

}
package com.itheima.Service;
public interface UserService {
    public void save();
}
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()");
    }
}
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() ");
    }

}
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();
    }
}

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

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

发表回复

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