【spring bean】bean的配置和创建方式

简介: ---恢复内容开始---   项目结构如下:   lib如下:       1.首先建立SayHell.java接口 1 package com.it.sxd; 2 3 public interface SayHell { 4 public void sayHello(); 5 } View Code 2.

---恢复内容开始---

 

项目结构如下:

 

lib如下:

 

 

 

1.首先建立SayHell.java接口

1 package com.it.sxd;
2 
3 public interface SayHell {
4         public void sayHello();
5 }
View Code

2.下面有它的两个实现类

SayHelloImpl.java

 1 package com.it.sxd;
 2 
 3 public class SayHelloImpl implements SayHell {
 4 
 5     @Override
 6     public void sayHello() {
 7         System.out.println("hello");
 8     }
 9 
10 }
View Code

SayHelloImpl2.java

 1 package com.it.sxd;
 2 
 3 public class SayHelloImpl2 implements SayHell {
 4     private String message;
 5 
 6     public SayHelloImpl2() {
 7         this.message = "无参的构造器";
 8     }
 9     
10     public SayHelloImpl2(String message) {
11         super();
12         this.message = message;
13     }
14 
15     @Override
16     public void sayHello() {
17         System.out.println(message);
18     }
19     
20 }
View Code

还有一个静态工厂SayHelloFactory.java

 1 package com.it.sxd;
 2 
 3 public class SayHelloFactory {
 4     
 5     public static SayHell  sayhell(String message){
 6         return new SayHelloImpl2(message);
 7     }
 8     
 9     public  static void  sayAmount(){
10         double b= 9/3;
11         System.out.println(b);
12     }
13     
14 }
View Code

 

3.配置文件hello.xml【bean都是在这里配置好的】

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <beans  
 3 xmlns="http://www.springframework.org/schema/beans"  
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 5 xmlns:context="http://www.springframework.org/schema/context"  
 6 xsi:schemaLocation="  
 7 http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
 8 http://www.springframework.org/schema/context                http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
 9 
10 
11      <!--测试1 :bean就是Ioc容器初始化。装配,管理的对象,除此之外,bean与应用程序中的对象没有任何区别, id 表示你这个组件的名字,class表示组件类,也就是位置 -->  
12     <bean id="hello1" class="com.it.sxd.SayHelloImpl">
13     </bean>  
14     
15     <!--测试2 无参的构造方法  使用标签alisa起别名   -->
16     <bean id="hello3" class="com.it.sxd.SayHelloImpl2">    
17     </bean>
18     <alias name="hello3" alias="alisa3"/>
19     
20     <!-- 测试2  有参数的构造方法  使用name,给多个值起别名-->
21     <bean id="hello2" name="alisa1,alisa2" class="com.it.sxd.SayHelloImpl2">
22         <constructor-arg index="0" value="hello有参构造方法"></constructor-arg><!-- 默认的为构造方法传值,index代表第几个参数,0代表第一个,value就是给构造器传递的值 -->
23     </bean>
24     
25     <!-- 测试3  静态工厂创建bean factory-method就代表初始化这个class类的时候,就执行了这个类中的"sayhell"方法,并且要求这个方法必须是static -->
26     <bean id="hello4" class="com.it.sxd.SayHelloFactory"  factory-method="sayhell">
27         <constructor-arg type="java.lang.String" value="静态工厂创建bean"></constructor-arg><!-- 为这个sayhell方法传递参数,参数类型是String类型,值是value -->
28     </bean>
29     
30     <!-- 测试3  静态工厂创建bean ,init-method初始化执行的方法 -->
31     <bean id="hello5" class="com.it.sxd.SayHelloFactory" init-method="sayAmount">
32     </bean>
33     
34     
35     
36 </beans>  
View Code

4.分别测试一下上面的两个实现类的对不同bean的组合配置

SayHelloTest.java 最基本的测试 ,对应SayHelloImpl.java

 1 package com.it.sxd;
 2 
 3 
 4 import org.junit.Test;
 5 import org.springframework.context.ApplicationContext;
 6 import org.springframework.context.support.ClassPathXmlApplicationContext;
 7 import org.springframework.context.support.FileSystemXmlApplicationContext;
 8 
 9 public class SayHelloTest {
10 
11     @Test
12     public void testSayHello(){
13         //System.out.println(SayHelloTest.class.getResource(""));
14         //1.读取hello。xml配置文件,实例化一个Ioc容器
15         ApplicationContext context = new FileSystemXmlApplicationContext("resources/hello.xml");
16         //2.从Ioc容器中获取ID为"hello1"的bean ,此处是“面向接口编程   而不是面向实现编程”
17         SayHell sayHell = context.getBean("hello1",SayHell.class);
18         //3.实现功能
19         sayHell.sayHello();
20     }    
21 
22 }
View Code

SayHelloTest2.java 有无参数的构造方法 对应SayHelloImpl2.java

 1 package com.it.sxd;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.FileSystemXmlApplicationContext;
 6 
 7 public class SayHelloTest2 {
 8 
 9     @Test
10     public  void testSayHello() {
11         ApplicationContext context = new FileSystemXmlApplicationContext("resources/hello.xml");
12         SayHell syahell = context.getBean("hello2",SayHell.class);//getBean()方法传进来两个参数  参数1:配置文件中bean的id   参数2:SayHell.class就是这个bean返回的结果强转为SayHell类型的
13         syahell.sayHello();
14         
15         SayHell sayhell2 = (SayHell) context.getBean("alisa3");//如果geyBean()方法不传进来第二个参数,那就需要自己进行强转
16         sayhell2.sayHello();
17         
18         String [] attr = context.getAliases("hello2");//getAliases() 获取id为hello2的bean的别名
19         for (String string : attr) {
20             System.out.println(string);
21         }
22     }
23 
24 }
View Code

SayHelloTest3.java 

 1 package com.it.sxd;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.FileSystemXmlApplicationContext;
 6 
 7 public class SayHelloTest3 {
 8     @Test
 9     public void sayHello(){
10         //1。通过加载配置文件来实例化一个Ioc容器,
11         ApplicationContext context = new FileSystemXmlApplicationContext("resources/hello.xml");
12         //2.从Ioc容器得到对应的bean
13         SayHell sayhell = context.getBean("hello4",SayHell.class);
14         //3.执行bean的方法
15         sayhell.sayHello();
16         
17         
18         SayHelloFactory sa = (SayHelloFactory) context.getBean("hello5");
19         
20         
21     }
22 }
View Code

 

运行的时候 右键 JUnit运行

---恢复内容结束---

---恢复内容结束---

相关文章
|
7月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
7月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
7月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
2557 0
|
9月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
1281 0
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1293 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
6月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
1416 2
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
978 26
|
7月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1365 5
|
7月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
404 0
探索Spring Boot的@Conditional注解的上下文配置