@Component,@Service,@Controller,@Repository
2025-09-11T09:13:16.png

这四个注解作用是完全样的一样的.都表示当前类交给spring去创建对象,然后放到容器当中.

@Component

在需要注入容器的对象上增加注解,如@Component
@Component("名字")
2025-09-11T09:05:39.png
然后XML扫描指定包下面有注解标识的类

<context:component-scan base-package="com.xy.entity"/>

2025-09-11T09:07:12.png
测试

@Test
public void phoneTest(){
    ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring-context.xml");
    Phone p=(Phone) context.getBean("Phone");
    System.out.println(p);
}

结果:

Phone(brand=null, price=null)

@Value

spring的注解,赋值属性给对象
2025-09-11T09:27:38.png
结果 >Phone(brand=小米, price=1500)

@Configuration

注解开发
2025-09-11T11:26:55.png
userConfig.class

@Configuration
@ComponentScan(basePackages="com.xy.entity")
public class userConfig {
    @Bean("userinit")
    public User userinit(){
        User user = new User();
        user.setName("xy");
        user.setAge(18);
        user.setSex("男");
        return user;
    }
}

创建一个配置类

@Configuration
@ComponentScan(basePackages="com.xy.entity")

@Configuration表示这个类为配置类,并且@ComponentScan扫描指定包下面被@Component标识的类
User.calss

@Data
@Component
public class User {
    private String name;
    private int age;
    private String sex;
}

测试:

User(name=xy, age=18, sex=男)
Dog(name=null, color=null)

因为开启了

@ComponentScan(basePackages="com.xy.entity")
所以:Dog dog=context.getBean(Dog.class);
    System.out.println(dog);

也有结果,不过是空的对象,因为
Dog.class也开启了组件@Component注解

@Component
public class Dog {
    private String name;
    private String color;
}

@PropertySource

@PropertySource是一个用于加载外部属性文件(如.properties或.xml文件)到 Spring 环境(Environment)中的注解。它允许将配置信息从代码中分离出来,实现配置与业务逻辑的解耦,这是 Spring 中实现外部化配置的重要手段之
比如:@PropertySource(value = "classpath:config/user.properties", encoding = "UTF-8")

使用@Value("${xxx}")来获取配置文件的值(SPEL表达式),xxx是配置文件对于的键
2025-09-12T07:01:14.png