「Spring Boot」核心技能之【常用注解】

SpringBoot摒弃XML配置方式,改为全注解驱动

1. 组件注册

注解作用
@Configuration声明配置类
@SpringBootConfiguration声明配置类
@Bean声明Bean对象
@Scope声明多实例实例、还是懒汉模式架子啊
@Controller用于指示Spring类的实例是一个控制器
@Service用于标识一个类作为服务层组件
@Repository用于标识一个类作为数据访问层组件 (Repository)
@ComponentSpring框架中的一个通用注解,用于标记一个类为组件,让Spring能够在应用程序启动时自动扫描并加载这些组件
@Import将普通类加载到Spring容器中
@ComponentScan告诉Spring扫描那些包下的类

实现方式:

1、@Configuration 编写一个配置类
2、在配置类中,自定义方法给容器中注册组件。配合@Bean
3、或使用@Import 导入第三方的组件

Demo

1. 创建实体类

先创建两个实体类,CatUser

package com.example.boot.Pojo;

public class Cat {
    private Long id;
    private String name;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }
}

package com.example.boot.Pojo;

public class User {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }
}

2 配置类实现

2.1 使用@Bean注解实现

package com.example.boot.conf;

import com.example.boot.Pojo.User;
import com.example.boot.Pojo.Cat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration
// @SpringBootConfiguration
public class JavaBootClass {

    @Bean // 替代以前的Bean标签,组件在容器中的名字默认是方法名,可以直接修改注解的值
    public User user() {
        User user = new User();
        user.setId(1L);
        user.setName("TestUserBean");
        return user;
    }

    /**
     * 默认是单实例的
     * @return
     */
    @Scope("prototype") // 实现方式变化 多例实现
    @Bean
    public Cat cat() {
        Cat cat = new Cat();
        cat.setId(1L);
        cat.setName("Test Cat Bean");
        return cat;
    }
}

2.2. 查看bean对象

package com.example.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Boot302DemoApplication {

    public static void main(String[] args) {
        var ioc = SpringApplication.run(Boot302DemoApplication.class, args);

        System.out.println("-------");
        Object user = ioc.getBean("user");
        Object user1 = ioc.getBean("user");
        System.out.println(user);
        System.out.println(user1);
        System.out.println(user1 == user);
        Object cat1 = ioc.getBean("cat");
        Object cat2 = ioc.getBean("cat");
        System.out.println(cat1 == cat2);
    }

}

2.3 结果

-------
User{id=1, name='TestUserBean'}
User{id=1, name='TestUserBean'}
true
false

3 使用 @Import 实现

组件的名称默认是全类名

package com.example.boot.conf;

import com.alibaba.druid.FastsqlException;
import com.example.boot.Pojo.User;
import com.example.boot.Pojo.Cat;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Scope;

@Import(FastsqlException.class) // 给容器中 放指定类型的组件,组件的名称默认是全类名
@Configuration
// @SpringBootConfiguration
public class JavaBootClass {

}

查看结果

package com.example.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Boot302DemoApplication {

    public static void main(String[] args) {
        var ioc = SpringApplication.run(Boot302DemoApplication.class, args);

        String[] names = ioc.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }

    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值