spring 创建Bean最全实现方法

创建bean方式,spring创建bean的方式包含:声明式样注入方式和编程式注入方式。分别为:

  声明式样注入包含:   1)xml 配置化方式  2)@bean注解注入方式3)@Component方式

  编程式注入包含:      4)接口注入方式 5)import 导入方式。

废话不多说,上代码,

第一种:xml

 1、xml 文件

1
2
3
4
5
6
7
8
9
<?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="hello" class="org.springframework.northeasttycoon.beans.Hello">
        <property name="displayName" value="this is display!"/>
    </bean>
</beans>

 2、hello实体类

复制代码
/**
 * @author :java.zhao
 * @date :2018-09-29 10:33
 */
public class Hello {

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    private String displayName;

    public void sayHello() {
        System.out.println("dispalyname values is:"+this.displayName);
    }

}
复制代码

 

3、启动类

复制代码
/**
 * @author :java.zhao
 * @description:xml 方式
 * @date :2018-09-29 10:10
 */
public class TestHelloService {

    public static void main(String[] args) {

        // 加载spring容器
        ApplicationContext ac1 = new ClassPathXmlApplicationContext("classpath:beanfactory.xml");

        Hello hello = (Hello)ac1.getBean("hello");
        hello.sayHello();
    }
}
复制代码

第二种:@bean注解注入方式

1、配置类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-09 11:10
 */
public class AppConfig02 {

    // 第三种 定义bean
    @Bean
    public Fox fox(){
        return new Fox();
    }
}
复制代码

2、fox 实体类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-04 4:43
 */
public class Fox {

    public  Fox() {
       System.out.println("new Fox()");
    }
}
复制代码

3、测试类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-09 11:09
 */
public class ioc02 {

    @Test
    public void test01(){
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig02.class);
        System.out.println("create fox bean:"+ac.getBean("fox"));
    }
}
复制代码

第三种:@Component 注解方式

1、Fox03类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-04 4:43
 */
@Component
public class Fox03 {

    public Fox03() {
       System.out.println("new Fox()");
    }
}
复制代码

2、配置类

/**
 * @author :java.zhao
 * @date :2018-10-09 11:10
 */
@ComponentScan("org.springframework.beandefinition01.bean")
public class AppConfig03 {

}

3、测试类

复制代码
/**
 * @author :tycoon
 * @date :2018-10-09 11:15
 */
public class ioc03 {

    @Test
    public void test01(){
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig03.class);
        System.out.println("create fox bean:"+ac.getBean("fox03"));
    }
}
复制代码

第四种:接口注入方式

1、Fox04 实体类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-04 4:43
 */
public class Fox04 {

    public Fox04() {
       System.out.println("new Fox04()");
    }
}
复制代码

2、测试类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-09 11:15
 */
public class ioc04 {

    @Test
    public void test01(){
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
        ac.refresh();
        DefaultListableBeanFactory beanFactory = ac.getDefaultListableBeanFactory();
        AbstractBeanDefinition beanDefinition1 = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
        beanDefinition1.setBeanClass(Fox04.class);
        beanFactory.registerBeanDefinition("fox04", beanDefinition1);
        System.out.println("create fox04 bean:"+ac.getBean("fox04"));
    }
}
复制代码

第五种: 实现  ImportBeanDefinitionRegistrar 接口

1、实现  ImportBeanDefinitionRegistrar 接口类。既:Fox05ImportBeanDefinitionRegistrar

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-04 6:06
 */
public class Fox05ImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

        BeanDefinition beanDefinition = new RootBeanDefinition(Fox05.class);
        registry.registerBeanDefinition("fox05",beanDefinition);
    }
}
复制代码

 

2、fox05实体类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-04 6:07
 */
public class Fox05 {
    public Fox05() {
        System.out.println("Fox05 create!");
    }
}
复制代码

3、配置类

/**
 * @author :tycoon
 * @description:TODO
 * @date :2021-10-04 4:30
 */
@Import(Fox05ImportBeanDefinitionRegistrar.class)
public class AppConfig05 {
}

4、测试类

复制代码
/**
 * @author :java.zhao
 * @date :2018-10-09 11:15
 */
public class ioc05 {

    @Test
    public void test01(){
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig05.class);

        System.out.println("create fox05 bean:"+ac.getBean("fox05"));
    }
}
复制代码

 

posted @   东北大亨  阅读(481)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示