微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Bean的定义概念和使用方法是什么

本篇内容介绍了“Spring Bean的定义概念和使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

定义

Spring bean 对象是构成应用程序的支柱,也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的。

创建Bean

基于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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="beanDemoJay" class="demo.BeanDemoJay"/>
</beans>

基于注解扫描的配置

从 Spring 2.5 开始就可以使用注解来配置依赖注入,在可以使用基于注解的配置之前,我们将需要在我们的 Spring 配置文件中启用它。

<?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
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 开启基于注解的配置 -->
    <context:annotation-config/>
    <!-- bean deFinitions go here -->
</beans>

当开启后,将可以在代码上使用注解,这表明 Spring 应该自动连接值到属性方法和构造函数。如下是常用的注解:

序号 说明
1 @required 注解应用于 bean 属性的 setter 方法
2 @Autowired 注解可以应用到 bean 属性的 setter 方法,非 setter 方法,构造函数属性
3 @Qualifier通过指定确切的将被连线的 bean,@Autowired 和 @Qualifier 注解可以用来删除混乱。
4 JSR-250 Annotationsspring 支持 JSR-250 的基础的注解,其中包括了 @Resource,@postconstruct 和 @PreDestroy 注解。

基于Java的配置

基于 Java 的配置,可以使你在不用配置 XML 的情况下编写大多数的 Spring,主要通过 @Configuration 和 @Bean 等注解。

Component系列
注解 说明
@Component 最普通的一个注解,一般用于把普通pojo实例化到spring容器中。@Controller 和 @Service 和@Repository 是它的特殊情况,只是作为一个普通的类,不需要特殊归类时,比较适合采用@Component注解。
@Controller 用于标注控制层,表示向控制层注入服务层的数据
@Service 用于标注服务层,来进行业务的逻辑处理,在服务层注入DAO层数据
@Repository 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
@Configuration 用于定义配置类,可替换xml配置文件,也可以理解为Spring配置文件当中的上下文。
依附于@Configuration的注解

@Bean 创建Deom

@Configuration
public class Demo {
    @Bean
    public Demo demo(){
        return new Demo();
    }
}

@Import 创建Cofing

@Configuration
@Import(Config.class)
public class Demo {
}

@Import.ImportSelector 选择器,传入@Import注解所在类Demo上所有的注解信息,返回要导入的类名

@Configuration
@Import(ImportSelector_.class)
public class Demo {   
}
public class ImportSelector_ implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.spring.demo.beanlifecycle.Demo"};
    }
}

@Impport.ImportBeanDeFinitionRegistrar Bean定义注册器,传入@Import注解所在类Demo上所有的注解信息:

Mybatis的Mapper接口就是用这种方式将Bean定义注册到Spring上下文的

@Configuration
@Import(ImportBeanDeFinitionRegistrar_.class)
public class Demo {
}
public class ImportBeanDeFinitionRegistrar_ implements ImportBeanDeFinitionRegistrar {
    @Override
    public void registerBeanDeFinitions(AnnotationMetadata importingClassMetadata, BeanDeFinitionRegistry registry) {
        BeanDeFinition beanDeFinition = BeanDeFinitionBuilder.rootBeanDeFinition(Bean.class).setinitMethodName("init").setDestroyMethodName("destroy").getBeanDeFinition();
        registry.registerBeanDeFinition("bean", beanDeFinition);
        System.out.println("registerBeanDeFinitions: " + beanDeFinition);
    }
}
factorybean

当通过“factorybean获取实例时,factorybean调用getobject()方法

当通过“&factorybean获取实例时,返回factorybean的实例;

当通过Demo.class来获取bean实例时,调用factorybean的getobjectTyoe()来获取类型。

@Configuration
public class Demo {
    @Bean
    public factorybeanfactorybean(){
        return new factorybean_();
    }
}
public class factorybean_ implements factorybean {
    @Override
    public Object getobject() throws Exception {
        return new Demo();
    }
    @Override
    public Class<?> getobjectType() {
        return Demo.class;
    }
}

“Spring Bean的定义概念和使用方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程之家网站,小编将为大家输出更多高质量的实用文章

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐