目录
IOC操作Bean管理注解方式(注入属性@Autowired、@Qualifier和@Resource)
1.基于注解方式实现 属性注入
(1)@Autowired:根据属性类型进行自动装配
第一步:
第二步:
(2)@Qualifier:根据属性名称进行注入
测试:
(3)@Resource:可以根据类型注入、也可以根据名称注入
(4)@Value:注入普通类型属性
测试:
IOC操作Bean管理注解方式(注入属性@Autowired、@Qualifier和@Resource)
1.基于注解方式实现 属性注入
(1)@Autowired:根据属性类型进行自动装配
结构图:
第一步:
把service 和 dao 对象进行创建,在 service 和 dao 类添加 创建对象注解
UserService类中代码如下:
package com.lbj.spring5.service;import org.springframework.stereotype.Service;//开启注解
@Service
public class UserService {public void add(){System.out.println("UserService is open");}
}
UserDao接口类代码如下:
package com.lbj.spring5.dao;public interface UserDao {public void add();}
UserDaoImpl类中代码如下:
package com.lbj.spring5.dao;import org.springframework.stereotype.Repository;@Repository
public class UserDaoImpl implements UserDao{@Overridepublic void add() {System.out.println("addmethod is open");}
}
第二步:
在service 注入dao 对象,在service类添加 dao 类型属性,在属性上面使用注解就可以做到注入dao 对象
注意:不需要添加set方法,因为注解已经进行封装
UserService类的代码如下:
package com.lbj.spring5.service;import com.lbj.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;@Service
public class UserService {//依旧是set注入,定义dao类型属性,但是不需要添加set方法//添加注入属性 注解
@Autowiredprivate UserDao userDao;public void add(){System.out.println("UserService is open");//调用效果userDao.add();}
}
测试:
(2)@Qualifier:根据属性名称进行注入
这个@Qualifier注解的使用,需要和上面的@Autowired一起使用
原因:因为只有 根据唯一的名称才可以准确找到属于哪一个类(毕竟一个接口一般是有多个实现类的)
演示:
测试:
(3)@Resource:可以根据类型注入、也可以根据名称注入
根据类型注入:UserService类中代码如下:
package com.lbj.spring5.service;import com.lbj.spring5.dao.UserDao;
import org.springframework.stereotype.Service;import javax.annotation.Resource;@Service
public class UserService {@Resource //根据类型进行注入private UserDao userDao;public void add(){System.out.println("UserService is open");//调用效果userDao.add();}
}
根据名称注入: UserService类中代码如下:
package com.lbj.spring5.service;import com.lbj.spring5.dao.UserDao;
import org.springframework.stereotype.Service;import javax.annotation.Resource;@Service
public class UserService {@Resource(name = "userDaoImpl01") //根据名称进行注入private UserDao userDao;public void add(){System.out.println("UserService is open");//调用效果userDao.add();}
}
需要注意:@Resource 的 引入的包是在java的扩展包 javax中,本身不是Spring里面的,因此官方不建议用这个注解
(4)@Value:注入普通类型属性
package com.lbj.spring5.service;import com.lbj.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import javax.annotation.Resource;@Service
public class UserService {@Value(value = "abc")private String name;public void add(){System.out.println("UserService is open"+name);//调用效果userDao.add();}
}
测试:
注意:(1)(2)(3)都是根据对象进行属性注入,(4)是根据普通类型属性注入