首页 > 编程语言 > 详细

Spring中的Bean

时间:2021-05-05 11:45:24      阅读:24      评论:0      收藏:0      [点我收藏+]

普通的Bean

xml配置文件
<bean id="bean1" class="包名.类名"/>

 

实例化方法

1.构造器实例化

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
类名 实例名 = (类名) applicationContext.getBean("bean1");

2.静态工厂方式实例化  略

3.实例工厂方式实例化  略

 

Bean的作用域

singleton(单例)、prototype(原型)、request、session、globlaSession、application、websocket
 

1.singleton 作用域 (默认)

<bean id="bean1" class="包名.类名" scope="singleton" />

单例模式 ,多次实例化也只会产生一个对象

 

2.prototype 作用域

<bean id="bean1" class="包名.类名" scope="prototype" />

每次实例化请求都会返回一个新实例

 

Bean生命周期

Spring会对singleton进行管理 具体略
 

Bean的装配方式(依赖注入方式)

①基于xml装配

②基于Annotation的装配

Spring可以对Bean中的属性进行初始化(值/引用)
 

1.Setter Injection(值注入) 

<bean id="user1" class="包名.类名">
        <property name="username" value="张三"></property>
        <property name="password" value="654321"></property>
        <property name="list">
                <list>
                        <value>"setlistvalue1"</value>
                        <value>"setlistvalue2"</value>
                </list>
        </property>
</bean>

注:id:Bean的唯一标识符

       class:Bean的具体实现类
       property:setter赋值使用此标签  name为Bean实例中的属性名,ref 或 value为属性值
       ref:另一个Bean的id
       value:一个常量值
上面例子给出了list 的填充 下面给出set和map的填充
 
// set与list基本相同
<set>
       <value>"setlistvalue1"</value>
       <value>"setlistvalue2"</value>
</set>
// map
<map>
        <entry key="p1" value="foo" />
        <entry key="p2" value="wz" />
</map>

 

2.Constructor Injection(构造注入)

<bean id="user2" class="包名.类名">
        <constructor-arg index="0" value="tom"/>
        <constructor-arg index="1" value="123456"/>
        <constructor-arg index="2">
                <list>
                        <value>"setlistvalue1"</value>
                        <value>"setlistvalue2"</value>
                </list>
        </constructor-arg>
</bean>

 

3.基于Annotation的装配

先要引入依赖
<dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-annotations-api</artifactId>
            <version>9.0.13</version>
</dependency>
                <!--两选一-->
<dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>jsr250-api</artifactId>
            <version>1.0</version>
</dependency>

 

常用注解
  • @Component: 泛化概念 仅仅就能表示一个组件(Bean)
  • @Repository:将数据访问层(DAO层)中的类标识为Spring中的Bean,功能与Component相同
  • @Service:将业务层(Service层)中的类标识为Spring中的Bean,功能与Component相同
  • @Controller:将控制层(Spring MVC 中的Controller层)中的类标识为Spring中的Bean,功能与Component相同
  • @Autowired:用于对Bean中的属性、属性的setter方法及构造方法进行标注、配合注解处理器完成Bean的自动配置工作 (先按类型自动查找注册的Bean(包括接口类) 、如果有多个则按名称查找)
  • @Resource:与Autowired相同 有name 或者 type属性 指定name 按照Bean id进行装配,指定type按照类型进行装配,不指定先按名称再按类型
  • @Qualifier:与@Autowired配合使用,指定Bean名称(id)
    @Autowired  + @Qualifier("bean名称")
 
@Respository("userDao")
public class UserDaoImp1 implements UserDao{
    public void save(){
        System.out.println("userdao...save...");
    }
}
@Service        //这样会默认和类名相同
public class UserServiceImp1 implements UserService{
    @Resource(name="userDao")
    private UserDao userDao;
    public void save(){
        this.userDao.save();
        System.out.println("userservice...save...");
    }
}

配置beans.xml

<!--方法1  效率低-->
<context:annotation-config />
<bean id="userDao" class="包名.UserDao"/>
<bean id="UserServiceImp1" class="包名.UserServiceImp1"/>
 
 <!--方法2-->
<context:component-scan base-package="Bean所在包路径">

 

4.自动装配

<bean id="userDao" class="包名.UserDao"/>
<bean id="UserServiceImp1" class="包名.UserServiceImp1" autowire="byName" />
autowrie 属性值:default(根据beans标签)、byName、byType、constructor(根据构造函数参数类型)、no(不自动装配)
 

Spring中的Bean

原文:https://www.cnblogs.com/ku1a/p/14730763.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!