论坛项目学习记录【预备篇1】

文章介绍了Spring框架中的组件扫描机制,如使用@Component注解自动注入对象,以及如何自定义Bean的id。讨论了Spring对Bean的管理策略,包括单例和原型作用域,并解释了懒惰初始化的概念。此外,还提到了@Import注解在导入其他配置文件中的应用。
摘要由CSDN通过智能技术生成

1. java程序类规范

java bean实际上时java程序中对类约定的定义规则

是一套规范,有了这套规范,方便使用和交流

  1. 所有类必须定义在包里
  2. 除非特殊原因一定要有无参构造
  3. 要实现序列化接口
  4. 所有属性需要使用getXxx和SetXxx的规则

2. Spring的组件扫描

2.1 使用组件扫描注入对象

我们之前的案例中使用的是@Bean来进行的注入

这种注入是需要编写代码的

如果需要实例化后为属性赋值或者类似操作,我们可以使用@Bean来注入到Spring容器

但是有些类没有需要赋值的属性,那么使用@Bean注入就比较麻烦了

可以使用@Component(英文:“组件”)

来标记在需要注入的类上,这样Spring内部可以自动注入

注入对象的id名是类名首字母小写的状态

例如:DragonBlade —> dragonBlade

但是如果类名是连续两个或以上的大写字母,那么id就是类名

例如:AWPGun —> AWPGun

注意光在类上加注解是不够的

还需要在Config类上加扫描的注解

小结组件扫描注入过程

  1. 在要注入的类上加注解@Component

  2. 注意类名生成的ID

  3. 别忘了在Config类上编写@ComponentScan扫描目标包

3. Spring提供多种注解注入对象

@Component
@Controller
@Service
等多种注解都可以响应组件扫描将这个类注入到Spring容器
一个功能分这么多注解的原因并不是注解的功能不同
区别仅在于他们单词的意思不同
我们使用的时候根据当前类的角色使用不同单词来注入

4.自定义组件的id

使用@bean注入时可以使用下面的方法自定义注入Spring容器的id
@Bean("caocao")
使用@Component以及其他可以组件注入的注解时
使用下面方法自定义注入Spring容器的id
@Component("db")

5.Spring容器对Bean的管理策略

5.1 管理Bean的作用域

什么是作用域

我们将Spring中Bean的作用域分为两种

1.单例(singleton):
当前这个注入的对象在Spring容器中只有1个
无论何时获取,均获得这同一个对象
Spring默认情况下管理Bean就是单例的

2.原型(prototype):
原型模式下,我们使用的注入只是一个模板
每次获得对象时,新实例化对象返回给我们的调用
所以每次获得得对象不是同一对象,互相没有关联

单例的好处:
节省内存,但是不能记录不同的属性或状态

原型的好处:
可以获得不同的对象,保存不同的属性或状态,但是频繁获取会制造过多对象,浪费内存

设置方式:

  1. 单例是默认的,无需设置

  2. 原型模式@Bean注入

    @Bean("caocao")
    @Scope("prototype")//原型
    public Stu student(){
        Stu stu = new Stu();
        stu.setName("曹操");
        stu.setAge(60);
        return stu;
    }

组件扫描

@Component("db")
@Scope("prototype")//原型
public class DragonBlade {
    ....
}

5.2 懒惰初始化

单例下我们在实例化Spring容器时就会自动创建单例的对象
如果程序中不使用这个对象,反而会造成内存的浪费
我们怎么弥补这个缺点呢?(这个情况只针对单例的对象)
使用懒惰初始化
懒惰初始化就是在程序使用到这个对象时在实例化这个对象的策略
一般用于不确定是否使用的对象使用注解
@Lazy
@Bean注入方式

    @Bean("caocao")
    //@Scope("prototype")
    @Lazy//懒惰加载
    public Stu student(){
        Stu stu=new Stu();
        stu.setName("曹操");
        stu.setAge(60);
        return stu;
    }

组件扫描注入方式

@Component("db")
@Lazy//懒惰初始化
public class DragonBlade {
...
}

6. 使用@Import导入其它配置文件

在实际开发中
一个项目可以有多个配置类
程序运行时他们都需要加载
最简单的办法就是在ACAC构造方法里使用,分割编写多个配置类的反射
例如

ctx=new AnnotationConfigApplicationContext(
                Config.class, Config2.class);

但是上面的代码在新增更多配置类时还是需要维护的
name我们可以在某个配置类中通过添加@Import注解的方式,不修改具体代码来添加配置类

@ComponentScan("cn.tedu.hero")
@Import({Config2.class})//同时加载Config2这个类中的Spring配置
public class Config {
....
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boy快快长大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值