Spring【@Resource、@Autowired+lombook+Bean的生命周期】

@Resource 和 @Autowired 的区别

在Spring中找Bean的两种方式:①先根据类型查找②再根据名称查找

@Autowired先根据类型查找,再根据名称查找【根据上述查找结果不唯一,再添加一个

@Qualifier(value=“”),就可以查找】

@Resource先根据名称查找,再根据类型查找【可以添加name=“”,就按照这个name查找】

 lombok 插件的作用:减少冗余的Set,Get代码,重写ToString

①添加依赖②增加@Setter和@Getter还有@ToString③idea上安装Lombok插件

Bean的作用域

默认是 单例模式 整个 Spring 中只有一份

1.singleton 单例模式【默认情况下】   ---->处于性能的考虑 只在Spring中存在一份

2.prototype 原型模式  ---->在存Bean的时候加入

@Scope("prototype")  @Scope("ConfigurableBeanFactory.SCOPE_PROTOTYPE")

@Component
public class UserBeans {
    @Bean
    @Scope("prototype")
    public User user1(){
        User user = new User();
        user.setId(18);
        user.setName("zhangsan");
        return user;
    }
}
@Controller
public class UserController {
    @Autowired
    private User user;

    public void sayHi(){
        System.out.println("UserController->"+user);
    }
}

在默认的单例模式下,Bean只在内存保存一份,在任意时间地方修改则都将被终生修改。

在原型模式下,则每一次@Autowired注入都将会重新开辟一块内存注入一个Bean的一份拷贝。 

原型模式的书写要在存Bean时添加如下注解

①@Scope("prototype")②@Scope("ConfigurableBeanFactory.SCOPE_PROTOTYPE")

Bean的生命周期【泛】

 Bean的生命周期【细】

1.开辟内存空间(实例化)

2.设置属性(注入属性)

3.初始化

        3.1各种通知 BeanNameAware、BeanFactoryAware、ApplicationContextAware的接口方法

        3.2初始化前置方法 BeanPostProcessor 初始化前置方法

        3.3初始化方法两种实现方法xml 方式注解方式@PostConstruct

        3.4自定义方法

        3.5初始化后置方法BeanPostProcessor

4.使用 Bean

5.销毁 Bean 对象

@Component
public class BeanCompont implements BeanNameAware {

    @Override
    public void setBeanName(String s) {
        System.out.println("BeanNameAware->执行了通知");
    }
    public void myInit(){ //自定义类
        System.out.println("BeanCompont->myInit");
    }

    @PostConstruct
    public void  doPostConstruct(){
        System.out.println("BeanCompont->PostConstruct注解初始化");
    }

    public void sayHi(){
        System.out.println("BeanCompont->sayHi()");
    }

    @PreDestroy
    public void doPreDestory(){
        System.out.println("BeanCompont->PreDestroy销毁");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
     <content:component-scan base-package="com.test.demo"></content:component-scan>
    <bean id="beanCompont" class="com.test.demo.component.BeanCompont" init-method="myInit"></bean>
</beans>
public class application {
    public static void main(String[] args) {
//        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//
//        UserController userController = context.getBean(UserController.class);
//        userController.sayHi();
        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        BeanCompont compont = context.getBean("beanCompont",BeanCompont.class);
        compont.sayHi();
        context.destroy();
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值