Spring

1.bean的实例化

1.bean的实例化需要对应的类有默认的构造方法,不然无法创建实例而报错.

2.接口本身是不能被实例化的。在Spring中,实际上是通过获取接口的实现类来实例化对象,而不是直接实例化接口。

在代码中,通过以下代码实例化了UserDao接口对象:

UserDao userDao = (UserDao) ac.getBean("UserDao");

在applicationContext.xml中,配置:

<bean id="UserDao" class="ssmDemo.dao.impl.UserDaoImpl" />

所以,通过Spring的IoC容器实例化的对象实际上是UserDao接口的实现类UserDaoImpl的实例,而不是接口本身的实例。

2.注解

1.对于使用注解进行依赖注入的类,通常需要确保相关的bean类中拥有与注入属性对应的setter方法。这样Spring才能正确地注入相关的依赖。

2.将Bean的作用域设置为Prototype(多例)时,使用@PreDestroy注解标记销毁方法时,它将不会生效,因为Spring容器不会在销毁Prototype Bean时自动调用该方法。

3.如果在类标注了@Scope("prototype"),那么在容器初始化的过程中会首先创建的一个单例实例,也就是说会多初始化一次这个类,如下:

bean的类:

@Repository
@Scope("prototype") //多例
public class UserDaoImpl implements UserDao {
    
    public void save() {
        System.out.println("user save ");
    }

    @PostConstruct
    public void init() {
        System.out.println("init... ");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("destroy... ");
    }

}

 测试类:

public class APP {
    public static void main(String[] args) {
        //获取ico容器
        AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfig.class);
        ac.registerShutdownHook();

        //获取bean
        UserDao userDao = (UserDaoImpl) ac.getBean(UserDaoImpl.class);
        userDao.save();
   }
}

结果:

init... 
init... 
user save

从上例可以看出,init方法被调用了两次,也就是bean的类被多实例化了一次

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值