Spring基于注解方式实现属性注入(超详细)
【摘要】
基于注解方式实现属性注入
首先需要开启开启组件扫描注入对象类型属性注入普通类型属性
注解说明@AutoWired根据属性类型自动装配@Qualifier根据属性的名称注入要和@AutoWired一起使用@Resource可以根据类型输入也可以根据名称注入@Value注入普通类型属性
上面的三种是注入对象的,@Value是注入普通类型属性的(如String)...
注解 | 说明 |
---|---|
@AutoWired | 根据属性类型自动装配 |
@Qualifier | 根据属性的名称注入要和@AutoWired一起使用 |
@Resource | 可以根据类型输入也可以根据名称注入 |
@Value | 注入普通类型属性 |
上面的三种是注入对象的,@Value是注入普通类型属性的(如String)。
首先需要开启开启组件扫描
bean1.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"> <!--开启组件扫描--> <context:component-scan base-package="com.Keafmd"></context:component-scan>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
注入对象类型属性
需求:我们通过注解的方式在UserService调用UserDaoImpl的方法。
第一步:把service和dao对象创建,在service和dao类添加创建对象的注解。
第二步:在service注入dao对象。
UserDao接口:
package com.Keafmd.spring5.dao;
/**
* Keafmd
*
* @ClassName: UserDao
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 15:39
*/
public interface UserDao { public void add();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
UserDaoImpl实现类:
package com.Keafmd.spring5.dao;
import org.springframework.stereotype.Repository;
/**
* Keafmd
*
* @ClassName: UserDaoImpl
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 15:39
*/
@Repository("userDaoImpl01")
public class UserDaoImpl implements UserDao{ @Override public void add() { System.out.println("dao add ..."); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
UserService类:
package com.Keafmd.spring5.service;
import com.Keafmd.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Keafmd
*
* @ClassName: UserService
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 13:15
*/
//在注解里的value值可以不写,默认就是类的首字母小写 userService
// @Component(value = "userService") //<bean id="userService" class=".."/>
@Service
public class UserService { //定义dao类型属性 ,不需要添加set方法了 //添加注入属性的注解 /* @Autowired @Qualifier(value = "userDaoImpl01") // 要和@AutoWired一起使用 ,填写value值是为了解决有多个实现类,根据类型的话就没法区分 private UserDao userDao;*/
// @Resource //根据类型注入 @Resource(name = "userDaoImpl01") // 根据名称注入 private UserDao userDao; public void add(){ System.out.println("service add......"); userDao.add(); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
测试类:
package com.Keafmd.spring5.testdemo;
import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Keafmd
*
* @ClassName: TestSpring5Demo1
* @Description: 测试类
* @author: 牛哄哄的柯南
* @date: 2021-01-17 13:03
*/
public class TestSpring5Demo1 { @Test public void testService(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = context.getBean("userService",UserService.class); System.out.println(userService); userService.add(); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
测试结果:
com.Keafmd.spring5.service.UserService@7ea37dbf
service add......
dao add ...
Process finished with exit code 0
- 1
- 2
- 3
- 4
- 5
service和dao中的内容都输出了,证明基于注解方式实现对象属性的注入就成功了。
注入普通类型属性
修改UserService类,添加一个String类型的属性,并使用@Value注解对普通类型的属性进行注入,在添加一个输出语句方便测试。
UserService类:
package com.Keafmd.spring5.service;
import com.Keafmd.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Keafmd
*
* @ClassName: UserService
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-17 13:15
*/
//在注解里的value值可以不写,默认就是类的首字母小写 userService
// @Component(value = "userService") //<bean id="userService" class=".."/>
@Service
public class UserService { @Value(value = "Keafmd") private String name; //定义dao类型属性 ,不需要添加set方法了 //添加注入属性的注解 /* @Autowired @Qualifier(value = "userDaoImpl01") // 要和@AutoWired一起使用 ,填写value值是为了解决有多个实现类,根据类型的话就没法区分 private UserDao userDao;*/
// @Resource //根据类型注入 @Resource(name = "userDaoImpl01") // 根据名称注入 private UserDao userDao; public void add(){ System.out.println("name:"+name); System.out.println("service add......"); userDao.add(); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
其他类和测试类不变。
测试结果:
com.Keafmd.spring5.service.UserService@7ea37dbf
name:Keafmd
service add......
dao add ...
Process finished with exit code 0
- 1
- 2
- 3
- 4
- 5
- 6
输出了Keafmd就证明成功的使用注解的方式注入了name属性。
以上就完成了基于注解方式实现属性注入。
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端的话,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
Keafmd
文章来源: keafmd.blog.csdn.net,作者:牛哄哄的柯南,版权归原作者所有,如需转载,请联系作者。
原文链接:keafmd.blog.csdn.net/article/details/112750916
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)