Spring装配javaBean的三种方式

1.使用@Component注解的方式装配bean

1.1使用注解的方式创建一个Bean

@Component  //这个地方还可以命名@Component("cDPlayer")
public class CDPlayer {

}

1.2你的配置类里面开启自动扫描

@Configuration
@ComponentScan("cm.bean")//这个地方的值就是表名了你会扫描那些包,其实跟xml里面的配置差不多
//@ComponentScan(basePackageClasses = MediaPlayer.class)//扫描MediaPlayer包下面的所有类
public class CDPlayerConfig {

}

1.3在装配的时候使用@Autowired装配即可

@Component
public class Test {
    
    @Autowired
    private CDPlayer cdPlayer;
    
}

这些是通过spring里面的注解@Component和@Autowired注解结合来装配bean其实也可以使用@Named和@Inject注解来创建和装配bean,区别不太大。我是习惯于使用spring原生态的注解。有兴趣的可以百度一下,很多帖子,我这里就不再赘述了。

2.通过java代码装配bean

2.1.1创建一个spring的配置类加入@Configuration注解声明成配置类

@Configuration
public class CDPlayerConfig {

}

2.1.2 创建一个javaBean

@Configuration
public class CDPlayerConfig {
	//这里就创建了一个CDPlayer的bean 这个bean在spring容器里面的ID就是cDPlayer @Bean这个注解支持对Bean重命名,可以自定义Bean的名称
    @Bean
    public CDPlayer cdPlayer(){
        return new CDPlayer();
    }
	@Bean
    public Test test(){
        return new Test();
    }
}

2.2.1 借住JavaConfig实现注入

利用构造器把CDPlay类注入到Test类里面Test类如下:

public class Test {

    private CDPlayer cdPlayer;

    public Test(CDPlayer cdPlayer) {
        this.cdPlayer = cdPlayer;
    }
}

配置类也通过方法调用注入:

@Configuration
public class CDPlayerConfig {
    @Bean
    public CDPlayer cdPlayer(){
        return new CDPlayer();
    }

    @Bean
    public Test test(){
        return new Test(cdPlayer());
    }

}

注意:看起来CDPlayer是通过调用cdPlayer()方法得到的,但情况并非完全如此,因为cdPlayer方法上添加了@Bean注解,Spring将会拦截所有对他的调用,并确保直接放回该方法所创建的Bean,而不是每次都对其进行实际的调用。如果像java调用方法那样调用一样的话,那么没有都会获取一个新的CDPlayer对象,但是Spring在默认的情况下bean是单利的,就违反了Spring默认的机制。如果你需要的就是每次都需要一个新的对象的话那么你可以通过配置去处理,详情可以去了解一下Bean的生命周期。Spring创建Bean的方式有好几种。例如单利,原型,request,session…等等。

2.2.2 通过另一种方式注入更方便

@Configuration
public class CDPlayerConfig {
    @Bean
    public CDPlayer cdPlayer(){
        return new CDPlayer();
    }

    @Bean
    public Test test(CDPlayer cdPlayer){
        return new Test(cdPlayer);
    }

}

这个里的test()方法请求一个CDPLayer作为参数。当Spring调用test()方法创建Test bean的时候,它会自动装配一个CDPlayer到配置方法之中,然后犯法提就可以按照合适的方式来使用他。借助这个技术,不用调用方法也可以注入CDPlayer,并且不用明确引用哪一个CDPlayer,如果CDPlayer是一个接口的话那么这个地方就可引用不同的实现类了。通过这种方式引用其他的Bean通常是最佳的选择。

3.通过XML文件装配bean

3.1xml文件里面声明一个bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
    <!--创建一个bean 这里id表示了这个类在spring容器里的唯一id,bean标签有一个name属性,也可以指定name属性,但是name属性有可能会重名-->
    <bean id="cdPlayer" class="cm.bean.pojo.CDPlayer"/>

</beans>

3.2 bean直接的注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">

   
    <bean id="cdPlayer" class="cm.bean.pojo.CDPlayer"/>
    <!--通过构造器注入值-->
    <bean id="test" class="cm.bean.pojo.Test">
        <constructor-arg ref="cdPlayer"/>
    </bean>

</beans>

或者使用c命名空间来入职值:

<?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:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">


    <bean id="cdPlayer" class="cm.bean.pojo.CDPlayer"/>
    <!--通过构造器注入值-->
    <bean id="test" class="cm.bean.pojo.Test">
        <constructor-arg ref="cdPlayer"/>
    </bean>
    
    <bean id="tests" class="cm.bean.pojo.Test" c:cdPlayer-ref="cdPlayer"/>

</beans>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,使用自动装配(Auto Configuration)可以简化配置和组件的使用,提高开发效率。自动装配是通过使用注解来实现的,以下是实现Spring Boot自动装配的注解方式: 1. @EnableAutoConfiguration @EnableAutoConfiguration注解是启用自动配置的注解,它会自动扫描classpath下的META-INF/spring.factories文件中的所有配置类,并将它们自动装配Spring容器中。 2. @ConditionalOnClass @ConditionalOnClass注解可以用来指定条件,只有在classpath中存在指定的类时才会进行自动配置。例如,只有当类com.example.MyClass存在时才会进行自动配置。 3. @ConditionalOnBean @ConditionalOnBean注解可以用来指定条件,只有在Spring容器中存在指定的Bean时才会进行自动配置。例如,只有当Bean com.example.MyBean存在时才会进行自动配置。 4. @ConditionalOnProperty @ConditionalOnProperty注解可以用来指定条件,只有当指定的配置项存在且值为指定值时才会进行自动配置。例如,只有当配置项myapp.enabled=true时才会进行自动配置。 5. @ConfigurationProperties @ConfigurationProperties注解可以用来将配置文件中的属性绑定到JavaBean中。例如,可以将application.properties中的myapp.name属性绑定到JavaBean的name属性上。 6. @ComponentScan @ComponentScan注解可以用来指定要扫描的包路径,这样Spring Boot就可以自动装配指定包路径下的组件。例如,可以使用@ComponentScan(basePackages={"com.example.controller"})来指定要扫描的控制器包路径。 7. @SpringBootApplication @SpringBootApplication注解是Spring Boot的核心注解,它包含了@EnableAutoConfiguration、@ComponentScan和@Configuration三个注解,可以简化配置和组件的使用。使用@SpringBootApplication注解可以让Spring Boot自动扫描并装配所有的组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值