springioc注解详解

springioc注解详解

*简略核心解释

在项目中,我们都是通过xml文件进行bean或者某些属性的赋 值,其实还有另外一种注解的方式,在企业开发中使用的很多,在bean上添加 注解,可以快速的将bean注册到ioc容器。

一、springioc是什么?

IOC是一种设计思想,在Java开发中,将你设计好的对象交给容器控制,而不是显示地用代 码进行对象的创建。 把创建和查找依赖对象的控制权交给 IoC 容器,由 IoC 容器进行注入、组合对象之间的关 系。这样对象与对象之间是松耦合、功能可复用(减少对象的创建和内存消耗),使得程序 的整个体系结构可维护性、灵活性、扩展性变高。 所谓IOC ,就简短一句话:对象由 spring来创建、管理,装配!

二、使用步骤

1、使用注解的方式注册bean到IOC容器中

  1. 导入jar包 ,maven配置pom.xml,详情可以去 spring初识与使用(一)

配置applicationContext.xml:

<?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.xsd">
    <!--
    如果想要将自定义的bean对象添加到IOC容器中,需要在类上添加某些注解
    Spring中包含4个主要的组件添加注解:
    @Controller:控制器,推荐给controller层添加此注解
    @Service:业务逻辑,推荐给业务逻辑层添加此注解
    @Repository:仓库管理,推荐给数据访问层添加此注解
    @Component:给不属于以上基层的组件添加此注解
    注意:我们虽然人为的给不同的层添加不同的注解,但是在spring看来,可以在任意层添加任意注解
           spring底层是不会给具体的层次验证注解,这样写的目的只是为了提高可读性,最偷懒的方式
           就是给所有想交由IOC容器管理的bean对象添加component注解

    使用注解需要如下步骤:
    1、添加上述四个注解中的任意一个
    2、添加自动扫描注解的组件,此操作需要依赖context命名空间
    3、添加自动扫描的标签context:component-scan

	注意:当使用注解注册组件和使用配置文件注册组件是一样的,但是要注意:
		1、组件的id默认就是组件的类名首字符小写,如果非要改名字的话,直接在注解中添加即可
		2、组件默认情况下都是单例的,如果需要配置多例模式的话,可以在注解下添加@Scope注解
    -->
    <!--
    定义自动扫描的基础包:
    base-package:指定扫描的基础包,spring在启动的时候会将基础包及子包下所有加了注解的类都自动
                扫描进IOC容器
    -->
    <context:component-scan base-package="cn.dreamgf"></context:component-scan>
</beans>

创建控制器类 PersonController.java:

package cn.dreamgf.controller;

import org.springframework.stereotype.Controller;
@Controller
public class PersonController {
    public PersonController() {
        System.out.println("Holle Word!");
    }
}

创建业务类 PersonService.java:

package cn.dreamgf.service;

import org.springframework.stereotype.Service;

@Service
public class PersonService {
 System.out.println("Holle Service!");
}

创建数据层类 PersonDao.java:

package cn.dreamgf.dao;

import org.springframework.stereotype.Repository;

@Repository("personDao")
@Scope(value="prototype")
public class PersonDao {
}

2、使用@AutoWired进行自动注入

使用注解的方式实现自动注入需要使用@AutoWired注解。

package cn.dreamgf.controller;

import cn.dreamgf.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class PersonController {

    @Autowired
    private PersonService personService;

    public PersonController() {
        System.out.println("创建对象");
    }

    public void getPerson(){
        personService.getPerson();
    }
}

PersonService.java

package cn.dreamgf.service;

import cn.dreamgf.dao.PersonDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PersonService {

    @Autowired
    private PersonDao personDao;

    public void getPerson(){
        personDao.getPerson();
    }
}

PersonDao.java

package cn.dreamgf.dao;

import org.springframework.stereotype.Repository;

@Repository
public class PersonDao {

    public void getPerson(){
        System.out.println("PersonDao:getPerson");
    }
}

注意:当使用AutoWired注解的时候,自动装配的时候是根据类型实现的。
1、如果只找到一个,则直接进行赋值,
2、如果没有找到,则直接抛出异常,
3、如果找到多个,那么会按照变量名作为id继续匹配,
1、匹配上直接进行装配
2、如果匹配不上则直接报异常


## 总结

在使用自动装配的时候,出了可以使用@AutoWired注解之外,还可以使用@Resource注解,大家需要知道这两个注解的区别。
1、@AutoWired:是spring中提供的注解,@Resource:是jdk中定义的注解,依靠的是java的标准
2、@AutoWired默认是按照类型进行装配,默认情况下要求依赖的对象必须存在,@Resource默认是按照名字进行匹配的,同时可以指定name属性。
3、@AutoWired只适合spring框架,而@Resource扩展性更好

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值