spring_ioc注解简单使用说明

1:编写applicationContext.xml文件,告诉ioc容器扫描哪些路径下的包

   <!--指定扫描包路径下的注解-->
   <context:component-scan base-package="com.jcf.api" >
   </context:component-scan>
   <!--引用外部属性资源文件   可以通过@Value来获取里面的key值-->
   <context:property-placeholder location="db.properties"></context:property-placeholder>

2:在对应的类上写上对应的注解

@Controller:控制器,推荐给controller层添加此注解
@Service:业务逻辑,推荐给业务逻辑层添加此注解
@Repository:仓库管理,推荐给数据访问层添加此注解
@Component:给不属于以上基层的组件添加此注解
@Lazy  当对象在被使用时,再加载实例化
@DependsOn("user")   某对象是实例要依赖其他对象(其他对象先实例,自己在实例)
@Scope("prototype")     实现多例
注意:我们虽然人为的给不同的层添加不同的注解,但是在spring看来,可以在任意层添加任意注解
       spring底层是不会给具体的层次验证注解,这样写的目的只是为了提高可读性,最偷懒的方式
       就是给所有想交由IOC容器管理的bean对象添加component注解

3:@Value 设置属性

    //1.硬编码
   @Value("邓紫棋")
    private String name;
    //2.引用别的对象设置对象属性
    @Value("#{role.name}")
    private String name;
    //3.引用外部资源文件设置对象属性
    @Value("${mysql.username}")
    private String name;

4:@Autowired 自动注入

4.1 @Autowired 作用在成员变量上

注意:当使用AutoWired注解的时候,自动装配的时候是根据类型实现的。

  1. 如果只找到一个,则直接进行赋值,
  2. 如果没有找到,则直接抛出异常,
  3. 如果找到多个,那么会按照变量名作为id继续匹配,
    • 匹配上直接进行装配
    • 如果匹配不上则直接报异常
  4. 还可以使用@Qualifier注解来指定id的名称,让spring不要使用变量名,
4.2 @Autowired 作用在方法上

     /**
     * 当方法上有@AutoWired注解时:
     *  1、此方法在bean创建的时候会自动调用
     *  2、这个方法的每一个参数都会自动注入值
     * @param personDao
     */
    @Autowired
    public void test(PersonDao personDao){
        System.out.println("此方法被调用:"+personDao);
    }
     /**
     * @Qualifier注解也可以作用在属性上,用来被当作id去匹配容器中的对象,如果没有
     * 此注解,那么直接按照类型进行匹配
     * @param personService
     */
    @Autowired
    public void test2(@Qualifier("personServiceExt") PersonService personService){
        System.out.println("此方法被调用:"+personService);
    }
4.3 自动装配的注解@AutoWired,@Resource区别
  1. @AutoWired:是spring中提供的注解,@Resource:是jdk中定义的注解,依靠的是java的标准
  2. @AutoWired默认是按照类型进行装配,默认情况下要求依赖的对象必须存在,@Resource默认是按照名字进行匹配的,同时可以指定name属性。
  3. @AutoWired只适合spring框架,而@Resource扩展性更好

5:泛型依赖注入

package com.jcf.api.dao;

import org.springframework.stereotype.Repository;

/**
 * Author:   jcf
 * Date:     2020/9/25 7:50
 * Description:
 */
@Repository
public abstract class BaseDao<T> {
    public abstract void save();
}

import com.jcf.api.dao.BaseDao;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Author:   jcf
 * Date:     2020/9/25 7:55
 * Description:
 */
public class BaseService<T> {
    @Autowired
    BaseDao<T> baseDao;
    public void save(){
        System.out.println("自动注入的对象:"+baseDao);
        baseDao.save();
    }
}
package com.jcf.api.service.impl;

import com.jcf.api.beans.Role;
import com.jcf.api.service.BaseService;
import org.springframework.stereotype.Service;

/**
 * Author:   jcf
 * Date:     2020/9/25 7:58
 * Description:
 */
@Service
public class RoleServiceImpl extends BaseService<Role>{
}
			
@Controller
public class UserController {
 /**
      *泛型依赖注入
      */
    @Autowired
    RoleServiceImpl roleServicel;

    public void save(){
        roleServicel.save();
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值