网站如何排名,网站后台有显示前台没有,vs网站制作教程,外贸移动端网站模板目录
1. 不创建参数类型的Bean
2. 创建一个与参数同类型同名的Bean
3. 创建多个与参数同类型#xff0c;其中一个与参数同名的Bean
4. 创建一个与参数同类型不同名的Bean
5. 创建多个与参数同类型但不同名的Bean 对于Bean修饰的方法#xff0c;也可能需要从外部传参其中一个与参数同名的Bean
4. 创建一个与参数同类型不同名的Bean
5. 创建多个与参数同类型但不同名的Bean 对于Bean修饰的方法也可能需要从外部传参现说明Bean的参数传递问题。
仍以BeanConfig类的userInfo方法为例假设当前方法需传递一个名为name的String类型的参数。
1. 不创建参数类型的Bean
BeanConfig类内容如下
package com.example.iocdemo1.Config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class BeanConfig {Beanpublic UserInfo userInfo(String name){UserInfo userInfo1new UserInfo();userInfo1.setId(1);userInfo1.setName(name);userInfo1.setAge(20);return userInfo1;}
}运行程序启动日志报错如下 即将参数name也视为一个bean该bean的类型为String当前并未定义该bean故报错。
2. 创建一个与参数同类型同名的Bean
修改BeanConfig类为其增加一个名为name的String类型的Bean如下
package com.example.iocdemo1.Config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class BeanConfig {Beanpublic String name(){return wangwu;}Beanpublic UserInfo userInfo(String name){UserInfo userInfo1new UserInfo();userInfo1.setId(1);userInfo1.setName(name);userInfo1.setAge(20);return userInfo1;}
}保持启动类内容不变重新启动程序
可见此时userInfo方法接收参数成功
3. 创建多个与参数同类型其中一个与参数同名的Bean
当前userInfo方法需要一个名为name类型为String的参数现创建两个String类型的Bean一个Beanname与形参名保持一致另外一个Beanname2与形参名不同
package com.example.iocdemo1.Config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class BeanConfig {Beanpublic String name(){return wangwu;}Beanpublic String name2(){return zhaoliu;}Beanpublic UserInfo userInfo(String name){UserInfo userInfo1new UserInfo();userInfo1.setId(1);userInfo1.setName(name);userInfo1.setAge(20);return userInfo1;}
}重新启动程序日志如下 可见当前userInfo方法接收了与参数名相同name的那个Bean
4. 创建一个与参数同类型不同名的Bean
当前userInfo方法需要的参数类型为String现创建一个String类型的Bean该Bean的名称name2与形参名称name不同
package com.example.iocdemo1.Config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class BeanConfig {Beanpublic String name2(){return zhaoliu;}Beanpublic UserInfo userInfo(String name){UserInfo userInfo1new UserInfo();userInfo1.setId(1);userInfo1.setName(name);userInfo1.setAge(20);return userInfo1;}
}运行程序日志如下
可见当前userInfo方法接收了与参数虽然名称不同name但类型相同String的那个Bean
5. 创建多个与参数同类型但不同名的Bean
当前userInfo方法需要的参数类型为String现创建两个String类型的Bean两个Bean的名称name2和name3都与形参名称name不同
package com.example.iocdemo1.Config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class BeanConfig {Beanpublic String name2(){return zhaoliu;}Beanpublic String name3(){return tianqi;}Beanpublic UserInfo userInfo(String name){UserInfo userInfo1new UserInfo();userInfo1.setId(1);userInfo1.setName(name);userInfo1.setAge(20);return userInfo1;}
}报错如下 总结Bean接收参数的原则
1、首先根据类型获取Bean若没有与参数类型匹配的Bean则报错
2、若满足类型要求的Bean有多个则优先获取与参数同名的Bean。
3、若存在一个名称虽不匹配但类型匹配的Bean则该Bean也可被Bean接收
4、若存在多个名称虽不匹配但类型匹配的Bean则无法匹配Bean报错