bean的自动装配

  • 自动装配是Spring满足bean依赖一种方式!
  • Spring会在上下文中自动寻找,并自动给bean装配属性!
  • 在Spring中有三种装配的方式
  1. 在xml中显示的配置
  2. 在java中显示配置
  3. 隐式的自动装配bean【重要】

环境

package com.pojo;

public class Cat {
public void shout() {
System.out.println("喵");
}
}
package com.pojo;

public class Dog {
public void shout(){
System.out.println("汪");
}
}
package com.pojo;

public class People {
private Cat cat;
private Dog dog;
private String name; public Cat getCat() {
return cat;
} public void setCat(Cat cat) {
this.cat = cat;
} public Dog getDog() {
return dog;
} public void setDog(Dog dog) {
this.dog = dog;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "People{" +
"cat=" + cat +
", dog=" + dog +
", name='" + name + '\'' +
'}';
}
}
<?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="cat" class="com.pojo.Cat"/>
<bean id="dog" class="com.pojo.Dog"/> <bean id="people" class="com.pojo.People">
<property name="name" value="张三"/>
<property name="cat" ref="cat"/>
<property name="dog" ref="dog"/>
</bean>
</beans>

ByName自动装配

<bean id="cat" class="com.pojo.Cat"/>
<bean id="dog" class="com.pojo.Dog"/> <bean id="people" class="com.pojo.People" autowire="byName">
<property name="name" value="张三"/>
</bean>

ByType

<bean id="cat" class="com.pojo.Cat"/>
<bean id="dog" class="com.pojo.Dog"/> <bean id="people" class="com.pojo.People" autowire="byType">
<property name="name" value="张三"/>
</bean>

小结:

  • byname的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致!.
  • bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致!

使用注解实现自动装箱

  • 导入约束
  • 配置注解的支持
<?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-3.0.xsd"> <context:annotation-config/> </beans>

Autowired

  • 直接在属性上使用即可!也可以在set方式上使用!
  • 使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC (Spring)容器中存在,且符合名字byname!
  • 科普:
@Nu11able   //字段标记了这个注解,说明这个字段可以为nu11;
public @interface Autowired {
boolean required() default true;
}
  • 测试代码
public class People {
//如果显示定义了Autowired的required属性为false,说明这个对象可以为nu11,否则不允许为空
@Autowired(required = false)
private Cat cat; @Autowired
private Dog dog; private String name;
}

Qualifier

  • 如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解 @Autowired 完成的时候、我们可以使用 @Qualifier(value="xxx") 去配置@Autowired的使用,指定一个唯一的bean对象注入!
public class People {
@Autowired
@Qualifier(value = "cat")
private Cat cat; @Autowired
@Qualifier(value = "dog")
private Dog dog; private String name;
}

Resource

public class People {
@Resource(name = "cat")
private Cat cat; @Resource
private Dog dog; private String name;
}

Resource和@Autowired的区别:

  • 都是用来自动装配的,都可以放在属性字段上
  • Autowired通过byType的方式实现,而且必须要求这个对象存在!【常用】
  • @Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!【常用】

使用注解开发

1.Bean

<?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-3.0.xsd"> <!--指定要扫描的包,这个包下的注解就会生效-->
<context:component-scan base-package="com.pojo"/>
<context:annotation-config/>
</beans>

2.属性如何注入

@Component
public class User {
@Value("张三")
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

3.衍生的注解

@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!

  • dao【@Repository】
  • service 【@service】
  • controller 【@controller]
  • 这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean

4.自动装配置

@Autowired :自动装配通过类型。名字
//如果Autowired不能唯一自动装配上属性,则需要通过@Qualifier(value="xxx")
@Nullable :字段标记了这个注解,说明这个字段可以为nu11;
@Resource :自动装配通过名字。类型。

5.作用域

@Component
@Scope("prototype")
public class User {
@Value("张三")
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

使用java的方式配置Spring

  • 实体类
@Component
@Scope("prototype")
public class User {
@Value("张三")
private String name; public String getName() {
return name;
} @Value("嘤嘤嘤")
public void setName(String name) {
this.name = name;
}
}
  • 配置文件
@Configuration
@ComponentScan("com.pojo")
public class comConfig { @Bean
public User getUser(){
return new User();
}
}
  • 测试类
public void test2(){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(comConfig.class);
User user = context.getBean("getUser", User.class);
System.out.println(user.getName());
}

bean的自动装配,使用注解开发,使用java的方式配置Spring的更多相关文章

  1. spring实战二之Bean的自动装配(非注解方式)

    Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...

  2. spring实战四之Bean的自动装配(注解方式)

    使用注解装配: 从spring2.5开始,Spring启用了使用注解自动装配Bean的属性,使用注解方式自动装配与在XML中使用 autowire 属性自动装配并没有太大区别,但是使用注解方式允许更细 ...

  3. Spring-04 Bean的自动装配

    Spring-04 Bean的自动装配 Bean的自动装配 1.自动装配说明 自动装配是使用spring满足bean依赖的一种方法. spring会在应用上下文中为某个bean寻找其依赖的bean. ...

  4. Spring学习03(Bean的自动装配)

    6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...

  5. Spring的自动装配和注解

    Bean的自动装配 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring的自动装配需要从两个角度来实现,或 ...

  6. Spring(三):bean的自动装配

    Bean的自动装配 自动装配是Spring满足bean依赖的一种方式. Spring会在上下文中自动寻找,并自动给bean装配属性 Spring中三种装配方式 在xml中显式的配置. 在java中显式 ...

  7. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配

    一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...

  8. Bean的自动装配及作用域

    1.XML配置里的Bean自动装配 Spring IOC 容器可以自动装配 Bean,需要做的仅仅是在 <bean> 的 autowire 属性里指定自动装配的模式.自动装配方式有: by ...

  9. Spring bean的自动装配属性

    bean的自动装配属性能简化xml文件配置. bean 的自动装配属性分为四种: 1.byName 2.byTyoe 3.constructor 4. autodetect byName: 它查找配置 ...

随机推荐

  1. @Qualifier 注解 ?

    当有多个相同类型的 bean 却只有一个需要自动装配时,将@Qualifier 注解和 @Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean.

  2. 名词解析-RPC

    什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程 ...

  3. SQLAlchemy 使用教程

    前戏: ​ 不用怀疑,你肯定用过Django中的orm,这个orm框架是django框架中自己封装的,在Django中配置和使用较为简单,但是并不适用于其他web框架,而今天说的sqlalchemy是 ...

  4. 学习Docker(一)

    一.docker介绍 docker是半虚拟化,比完全虚拟化性能高,可以使用物理机性能100% Docker 镜像(Images): 用于创建 Docker 容器的模板 Docker 容器(Contai ...

  5. 学习FastDfs(三)

    FASTDFS是什么 FastDFS是由国人余庆所开发,其项目地址:https://github.com/happyfish100 FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文 ...

  6. java中如何获得src路径

    代码 解析: 类名.class.get类加载器().getResourceAsStream("文件名"); 案例代码: Demo.class.getClassLoader().ge ...

  7. git 泄露(Log、Stash、Index)svn泄露

    Git泄露 Log 首先介绍下.git:Git泄露:当前大量开发人员使用git进行版本控制,对站点自动部署.如果配置不当,可能会将.git文件夹直接部署到线上环境.这就引起了git泄露漏洞. 首先使用 ...

  8. HTML入门学习笔记(二)

    第三章 文本 段落 p <p>毫不奇怪,p是最常用到的HTML元素之一</p> 作者联系信息 address address并不是用于标记邮政地址,而是定义与HTML页面或页面 ...

  9. [翻译]Service workers:PWA背后的英雄

    原文地址:https://medium.freecodecamp.org/service-workers-the-little-heroes-behind-progressive-web-apps-4 ...

  10. 认识 Function.prototype.bind()

    欢迎前端爱好者加入QQ群:112916679 答疑解惑,且可获取更多前端资料! bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个 ...