zl程序教程

您现在的位置是:首页 >  后端

当前栏目

使用java的方式配置Spring(@Component、@Configuration、@Bean)

JAVASpring配置 方式 bean Component configuration 使用
2023-09-27 14:26:26 时间

使用java的方式配置Spring

1、@Component配合@Bean实现

  • @Component代表这是一个配置类,就和我们之前看的beans.xml是一样的
  • @Bean,相当于我们之前写的一个bean标签
  • 代码实现
    1.注解实现
      public class User {
          private String name;
      
          public String getName() {
              return name;
          }
      
          //属性注入值
          @Value("狂神")
          public void setName(String name) {
              this.name = name;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "name='" + name + '\'' +
                      '}';
          }
      }
    
    @Component
    @ComponentScan("nuc.ss.pojo")
    public class MyConfig {
        //这个方法的名字就相当于bean标签的id属性
        //这个方法的返回值,就相当于bean标签中的class属性
        @Bean
        public User user() {
            return new User();//就是要返回注入到bean的对象!
        }
    }
    
    2.相当于xml中:
    <?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:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
            
    	<bean id="user" class="nuc.ss.pojo.User">
    		<property name="name" value="狂神"/>
    	</bean>
    	<context:component-scan base-package="nuc.ss.pojo"/>
    	
    </beans>
    

2、@Configuration配合@Bean实现

  • @Configuration代表这是一个配置类,就和我们之前看的beans.xml是一样的
  • @Bean,相当于我们之前写的一个bean标签
  • 代码实现
    1.注解实现
      public class User {
          private String name;
      
          public String getName() {
              return name;
          }
      
          //属性注入值
          @Value("狂神")
          public void setName(String name) {
              this.name = name;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "name='" + name + '\'' +
                      '}';
          }
      }
    
    @Configuration
    @ComponentScan("nuc.ss.pojo")
    public class MyConfig {
        //这个方法的名字就相当于bean标签的id属性
        //这个方法的返回值,就相当于bean标签中的class属性
        @Bean
        public User user() {
            return new User();//就是要返回注入到bean的对象!
        }
    }
    
    2.相当于xml中:
    <?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:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
            
    	<bean id="user" class="nuc.ss.pojo.User">
    		<property name="name" value="狂神"/>
    	</bean>
    	<context:component-scan base-package="nuc.ss.pojo"/>
    </beans>
    

3、@Component配合@Configuration实现

  • @Component说明这个类被Spring接管了,注册到了容器中,相当于之前的@Bean
  • @Configuration代表这是一个配置类,就和我们之前看的beans.xml是一样的
  • 代码实现
    1.注解实现
    @Component
    public class User {
        private String name;
    
        public String getName() {
            return name;
        }
    
        //属性注入值
        @Value("狂神")
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    
    @Configuration
    @ComponentScan("nuc.ss.pojo")
    public class MyConfig {
        public User user() {
            return new User();//就是要返回注入到bean的对象!
        }
    }
    
    2.相当于xml中:
    <?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:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
            
    	<bean id="user" class="nuc.ss.pojo.User">
    		<property name="name" value="狂神"/>
    	</bean>
    	<context:component-scan base-package="nuc.ss.pojo"/>
    </beans>
    

4、测试类

	@Test
    public void test() {
        // 如果完全使用了配置类的方式去做,我们就只能通过AnnotationContext 上下文来获取容器,通过配置类的class对象加载!
        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);

        User getUser = context.getBean("user", User.class);

        System.out.println(getUser.getName());
    }

5、@Component与@Configuration区别联系