深入浅出:Spring IOC 容器与注解详解

1、IOC容器概念

IOC:Inverse of Control,控制反转,将对象的创建权反转给Spring

对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。而Spring提供了IOC容器来帮我们生成所需要的对象。也就是说在我们原先的对象中有用到其他对象的地方Spring会帮我们来注入。

   1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理。

   2)使用IOC目的:为了耦合度降低

A类想要调用B类就必须自己在自己的内部新建B类的对象,这样的耦合度太高

Spring ----------------> IOC 控制权翻转

(4).基于注解的方式实现Bean管理和注入属性

一、配置xml,配置创建对象

<bean id="demo" class="com.qcby.service.Demo"/>

在service创建UserService类

在xml中配置bean

<bean id="user" class="com.qcby.service.UserService"/>

创建UserServiceTest测试类

public class UserServiceTest {
    @Test
    public void demo(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService user = (UserService) ac.getBean("userService");
        user.run();
        System.out.println(user.toString());
    }
}

基于set方法进行依赖注入

测试输出结果,demo输出的是demo的地址

遇到了数组、集合、map

在UserService中定义

生成set get方法以及构造函数

数组strs

用property

            array

                value

<property name = "strs">
<array>
    <value>aaa</value>
    <value>aa</value>
    <value>a</value>
</array>
</property>
集合List
 <property name = "list">
<list>
    <value>aaa</value>
    <value>a</value>
</list>
</property>
map

key是MAP中的第一个String

value是第二个String

<property name = "map">
<map>
     <entry key="aaa" value="小黑"/>
      <entry key="bbb" value="小白"/>
</map>
</property>

输出

用构造器的方式实现

public UserService(Integer age, String name, String sex, Demo demo) {
    this.age = age;
    this.name = name;
    this.sex = sex;
    this.demo = demo;
}

@Override
public String toString() {
    return "UserService{" +
            "age=" + age +
            ", name='" + name + '\'' +
            ", sex='" + sex + '\'' +
            ", demo=" + demo +
            '}';
}

xml中

<constructor-arg name="age" value="17"/>
        <constructor-arg name="name" value="admin"/>
        <constructor-arg name="sex" value="男"/>
        <constructor-arg name="demo" ref="demo"/>

数组、集合、map

private String[] strs;
private List<String> list;
private Map<String,String>map;

public UserService(String[] strs, List<String> list, Map<String, String> map) {
    this.strs = strs;
    this.list = list;
    this.map = map;
}
<constructor-arg index="0">
    <array>
        <value>aaa</value>
        <value>aa</value>
        <value>a</value>
    </array>

</constructor-arg>
<constructor-arg index="1">
    <list>
        <value>ab</value>
        <value>abc</value>
    </list>
</constructor-arg>
<constructor-arg index="2">
    <map>
        <entry key="aaa" value="小黑"/>
        <entry key="bbb" value="小白"/>
    </map>
</constructor-arg>

index也可以改成name

1.什么是注解

①:注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...)

②:使用注解,注解作用在类上面,方法上面,属性上边

③:使用注解的目的:简化XML配置

2.Spring针对Bean管理中创建对象提供的注解

@Component 普通的类

@Controller 表现层

@Service 业务层

@Repository 持久层

*上边四个功能一样,都可以用来创建bean实例

@Autowired:自动按类型注入,如果有多个匹配则按照指定的Bean的id查找

@Qualifier:在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired,给方法注入时可单独使用

@Resource:直接按照Bean的id注入,只能注入Bean类型

@value:用于注入基本数据类型和String类型

Spring.xml中

<!--开启注解扫描--> <context:component-scan base-package="com.qcby"/>

扫描哪个包,base-package后面写哪个包名

新建entity包,建User类

我们想要扫描到User的注解,需要扫描entity包

com.qcby包含了entity包,直接写com.qcby可以扫描到qcby下面的包

但如果只写com.qcby.service,就不会扫描到entity

生成对象调用方法

public void hello(){
    System.out.println("hello world");
}

配置@Component

在@Compontent 加上value值

@Component(value = "user")

获取到谁是由value值决定

用@value给对象注值

@Value("18")
private Integer age;
@Value("张三")
private String name;
@Value("男")
private String sex;

@Autowired 默认按类型自动装配

@Resource java提供的注解,也被支持,使用name属性,按名称注入

@Qualifiter按名称注入

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值