Bean在Spring和SpringMVC中随处可见,将这个概念内化很重要,下面分享一下我的想法:

一、Bean到底是什么?

我个人的理解,觉得bean就相当于定义一个组件,这个组件是用于具体实现某个功能的。这里的所定义的bean就相当于给了你一个简洁方便的方法来调用这个组件实现你要完成的功能。

1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化)
2、凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性
3、规律:凡是子类及带有方法或属性的类都要加上注册Bean到Spring IoC的注解;(@Component , @Repository , @ Controller , @Service , @Configration)
4、把Bean理解为类的代理或代言人(实际上确实是通过反射、代理来实现的),这样它就能代表类拥有该拥有的东西了
5、我们都在微博上@过某某,对方会优先看到这条信息,并给你反馈,那么在Spring中,你标识一个@符号,那么Spring就会来看看,并且从这里拿到一个Bean(注册)或者给出一个Bean(使用)

二.怎么使用bean?

**对于我们的spring最主要的应该就是由这些bean组成的bean工厂,每个bean实现一个功能
例如:你写的第一个bean

<bean id="userAction" class="com.neusoft.gmsbs.gms.user.action.UserAction"
scope="prototype">
<property name="userBO" ref="userBO" />
</bean>

id相当于定义了你的这个bean的别名,如果你需要他的话只要关联这个别名就可以了,也就相当于下面的一样,在你的userAction中需要实现userBO这个功能,我关联它,那么在action中set注入就可以使用了!
至于其他的属性看下面:
Id : 标识该bean的名称,通过factory.getBean(“id”)来获得实例。
Class : 该bean的类路径。
Singleton : 默认为true,即单实例模式,每次getBean(“id”)时获取的都是同
一个实例,如果设置为false,即原型模式,则每次获取的是新创建
的实例。**

三.Bean配置

ID,name 或class
一般情况下,转配一个Bean时,通过指定一个ID属性作为Bean的名称
1.id属性在IOC容器中必须是唯一的
2.如果Bean的名称中含有特殊字符,就需要使用name属性
3.class用于设置一个类的完全路径名称,主要作用是ioc容器生成类的实例

四.Bean的作用域

https://mp.csdn.net
上代码操作:

1. 新建配置文件 》resources》applicationContext.xml
 <!--Bean的作用范围-->
    <bean id="person" class="com.coure.ioc.demo.Person" scope="singleton"></bean>
2.  新建class文件 Spring  
package com.coure.ioc.demo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Spring {
    @Test
    public void demo(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       Person persion1 =  (Person)applicationContext.getBean("person");
       Person persion2 =  (Person)applicationContext.getBean("person");
        System.out.println(persion1);
        System.out.println(persion2);
    }
}
3.新建class文件 person
package com.coure.ioc.demo;

public class Person {
}
执行run方法 demo
 <!--Bean的作用范围-->
    <bean id="person" class="com.coure.ioc.demo.Person" scope="singleton"></bean>
com.coure.ioc.demo.Person@20140db9
com.coure.ioc.demo.Person@20140db9
 <!--Bean的作用范围-->
    <bean id="person" class="com.coure.ioc.demo.Person" scope="prototype"></bean>
com.coure.ioc.demo.Person@20140db9
com.coure.ioc.demo.Person@1e6a3214

从上面的例子也印证了我上面的总结的内容:
1、凡是子类及带属性、方法的类都注册Bean到Spring中,交给它管理;
2、@Bean 用在方法上,告诉Spring容器,你可以从下面这个方法中拿到一个Bean

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐