Spring Bean定义

一、声明Bean的几种方式

1、xml 配置
2、配置类中定义
3、注解定义@Componet(@Controller @Service @Repository)
4、import导入

${}获取外部资源文件中的值
#{}:el表达式

 

二、自动注入方式

1、setter属性注入
2、构造器注入

xml中自动装配原理:autowire的值
a、byType:根据类型去自动匹配 当出现多个类型或者未匹配到类型则会报错(默认)
b、byName:根据set方法的名字去自动匹配
c、constructor:根据构造器去匹配
优先根据参数名字去匹配,假如参数名字未匹配到,则根据参数类型去匹配,如果类型出现多个,会注入失败
根据构造器的参数进行完整匹配,如果IOC容器中定义的Bean,不满足构造器中的参数类型及个数,则注入失败

<context:component-scan base-package="">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
</context:component-scan>
use-default-filters 默认为true,默认扫描@Controller,@Service,@Repository,@Componet等注解

1、排除扫描选项:<context:exclude-filter type="" expression=""></context:exclude-filter>
2、包含扫描选项:<context:include-filter type="" expression=""></context:include-filter>
type值类型:
a、annotation 默认值 根据注解的完整限定名设置排除/包含
b、assignable 根据类的完整限定名设置排除/包含

引用外部资源文件
<context:property-placeholder location="db.properties"></context:property-placeholder>

@Autowired的自动注入
默认优先根据类型进行匹配
如果根据类型匹配到多个则根据名字进行匹配,
如果根据名字(实现类的类名)没有匹配到则报错
处理方式:
a、可以修改属性的名字对应bean的名字,userServiceImpl
@Autowired
private UserService userServiceImpl;
b、可以去修改Bean注册到IOC容器的名字,@Service("userService")
@Autowired
private UserService userServiceImpl;
c、可以通过@Qualifier设置获取属性的名字,@Qualifier("userServiceImpl")
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;


三、java类配置IOC的Bean实例

1、配置类上加
a、@Configuration:用于标记一个spring配置类,相当于spring配置Bean实例的xml文件
b、@ComponetScan(basePachages="cn.com.landiss"):相当于<context:component-scan base-package="cn.com.landiss">
c、@PropertySource("db.properties"):引入外部资源文件,
可以通过如下方式获取值:
@Value("${mysql.username}")
private String username;
@Value("${mysql.password}")
private String password;
@Value("${mysql.url}")
private String url;
@Value("${mysql.driverClass}")
private String driverClass;

d、@Import:
1)导入其他的配置类。选用
2)将引入的类配置为一个bean实例

2、声明Bean的方式
即在类中定义方法,如下:
public UserService userService(){
return new UserService();
}
返回类型未需要注册的到IOC中的类型,方法名相当于xml中定义的Bean ID

3、bean属性注入方式
a、注入外部bean实例,通过定义方法参数获取要注入的属性值
b、注入内部bean实例,在配置内中直接调用定义的方法即可
注:内部与外部是针对当前的配置类

posted on 2021-03-08 18:12  landiss  阅读(86)  评论(0编辑  收藏  举报