Annotation 注解
注入注解:@Autowired 注入
1.加在set方法上, 默认按类型by type,如果在 spring 容器中能够找到多个相同的类型,就从这多个类型找查找有没有一个key的值跟我们的 set 方法的参数名相同,如果有,就注入;没有的话,就无法判断要注入哪一个,导致报错
如果想用byName,使用@Qulifie 需要写在参数上
文件目录
代码:配置文件:beans.
<? version="1.0" encoding="UTF-8"?><beans ns="http://www.spring work.org/schema/beans" ns:xsi="http://www.w3.org/2001/ Schema-instance" ns:context="http://www.spring work.org/schema/context" xsi:schemaLocation="http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd http://www.spring work.org/schema/context http://www.spring work.org/schema/context/spring-context-4.0.xsd"> <context:component-scan -package="com.neudeu.service,com.neuedu.dao"></context:component-scan> </beans>-package="com.neudeu.service,com.neuedu.dao 扫描这两个包
Test.java
package com.neuedu.test;import org.spring work.context.ApplicationContext;import org.spring work.context.support.ClassPath ApplicationContext;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPath ApplicationContext("beans. "); } }UserDao.java
package com.neuedu.dao;import org.spring work.stereotype.Component; @Component //注解方式//Spring 自动地给这个类创建对象并将这个类放到 String 容器中去public class UserDao { public UserDao() { System.out.println("UserDao..."); } public void save(){ System.out.println("保存用户信息..."); }}@Component //注解方式
UserService.java
package com.neudeu.service;import org.spring work.stereotype.Component;import com.neuedu.dao.UserDao;@Component public class UserService { public UserService() { System.out.println("UserService..."); } private UserDao userDao; public void save(){ userDao.save(); }} 输出:
修改代码:
UserService.java
package com.neudeu.service;import org.spring work.beans.factory.annotation.Autowired;import org.spring work.stereotype.Component;import com.neuedu.dao.UserDao;@Component public class UserService { public UserService() { System.out.println("UserService..."); } private UserDao userDao; public void save(){ userDao.save(); } @Autowired //自动的将 userDao的属性注入进来 //修改代码 public void setUserDao(UserDao userDao) { //修改代码 System.out.println("setUserDao..."); //修改代码 this.userDao = userDao; //修改代码 }} 输出: @Autowired //自动的将 userDao的属性注入进来
修改代码:
Test.java
package com.neuedu.test;import org.spring work.context.ApplicationContext;import org.spring work.context.support.ClassPath ApplicationContext;import com.neudeu.service.UserService;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPath ApplicationContext("beans. "); UserService userService = ac.getBean(UserService.class); userService.save(); } }输出:
set 注入 byName,按名称注入
修改代码:配置文件:beans.
<? version="1.0" encoding="UTF-8"?><beans ns="http://www.spring work.org/schema/beans" ns:xsi="http://www.w3.org/2001/ Schema-instance" ns:context="http://www.spring work.org/schema/context" xsi:schemaLocation="http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd http://www.spring work.org/schema/context http://www.spring work.org/schema/context/spring-context-4.0.xsd"> <context:component-scan -package="com.neudeu.service,com.neuedu.dao"></context:component-scan> <bean id="ud" class="com.neuedu.dao.UserDao"></bean></beans>输出:byName,按名称注入
修改代码:beans.
<? version="1.0" encoding="UTF-8"?><beans ns="http://www.spring work.org/schema/beans" ns:xsi="http://www.w3.org/2001/ Schema-instance" ns:context="http://www.spring work.org/schema/context" xsi:schemaLocation="http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd http://www.spring work.org/schema/context http://www.spring work.org/schema/context/spring-context-4.0.xsd"> <context:component-scan -package="com.neudeu.service,com.neuedu.dao"></context:component-scan> <bean id="ud" class="com.neuedu.dao.UserDao"></bean> <bean id="ud1" class="com.neuedu.dao.UserDao"></bean> //修改代码</beans>UserService.java
package com.neudeu.service;import org.spring work.beans.factory.annotation.Autowired;import org.spring work.beans.factory.annotation.Qualifier;import org.spring work.stereotype.Component;import com.neuedu.dao.UserDao;@Component public class UserService { public UserService() { System.out.println("UserService..."); } private UserDao userDao; public void save(){ userDao.save(); } @Autowired //自动的将 userDao的属性注入进来 public void setUserDao(@Qualifier("ud1") UserDao userDao) { //修改代码 System.out.println("setUserDao..."); this.userDao = userDao; }} 输出:
2.加在属性上,默认按类型bytype; 如果想用byName,使用@Qulifie
修改代码:beans.
<? version="1.0" encoding="UTF-8"?><beans ns="http://www.spring work.org/schema/beans" ns:xsi="http://www.w3.org/2001/ Schema-instance" ns:context="http://www.spring work.org/schema/context" xsi:schemaLocation="http://www.spring work.org/schema/beans http://www.spring work.org/schema/beans/spring-beans.xsd http://www.spring work.org/schema/context http://www.spring work.org/schema/context/spring-context-4.0.xsd"> <context:component-scan -package="com.neudeu.service,com.neuedu.dao"></context:component-scan> <bean id="ud" class="com.neuedu.dao.UserDao"></bean> <bean id="userDao" class="com.neuedu.dao.UserDao"></bean> //修改代码</beans>UserService.java
package com.neudeu.service;import org.spring work.beans.factory.annotation.Autowired;import org.spring work.beans.factory.annotation.Qualifier;import org.spring work.stereotype.Component;import com.neuedu.dao.UserDao;@Component public class UserService { @Autowired //自动的将 userDao的属性注入进来 @Qualifier("ud") private UserDao userDao; public UserService() { System.out.println("UserService..."); } public void save(){ userDao.save(); } } 输出:
@Resource 注入
默认按名称,名称找不到,按类型;可以指定特定名称
修改代码:
UserService.java
package com.neudeu.service;import javax.annotation.Resource;import org.spring work.beans.factory.annotation.Autowired;import org.spring work.beans.factory.annotation.Qualifier;import org.spring work.stereotype.Component;import com.neuedu.dao.UserDao;@Component public class UserService { @Resource //修改代码 @Qualifier("ud") private UserDao userDao; public UserService() { System.out.println("UserService..."); } public void save(){ userDao.save(); } } 输出:@Resource 作用和 Autowired 一样,不过注入方式不同,前者默认按名称byName,后者默认按类型bytype
强制按名称,找不到则报错
UserService.java
package com.neudeu.service;import javax.annotation.Resource;import org.spring work.beans.factory.annotation.Autowired;import org.spring work.beans.factory.annotation.Qualifier;import org.spring work.stereotype.Component;import com.neuedu.dao.UserDao;@Component public class UserService { //@Autowired //自动的将 userDao的属性注入进来 @Resource(name="ud1") //修改代码 //@Qualifier("ud") private UserDao userDao; public UserService() { System.out.println("UserService..."); } public void save(){ userDao.save(); } } 输出:
组件注解
@Component,@Controller,@Service,@Repository
初始化的名字默认为类名首字母小写,可以指定初始化bean的名字;
实质没有任何区别,功能都一样,在哪个层都可以随意调用,但推荐尽量遵从规范。
继续阅读与本文标签相同的文章
上一篇 :
初识 Spring(04)---(bean属性)
下一篇 :
初识 Spring(06)---(MVC原理)
-
delegate委托的例子,实现对Form中控件的更新
2026-05-26栏目: 教程
-
C#中用WMI实现对驱动的查询
2026-05-26栏目: 教程
-
WMI_COM_API
2026-05-26栏目: 教程
-
C#窗体实现打开关闭VM虚拟机
2026-05-26栏目: 教程
-
C#控制台打开VM虚拟机
2026-05-26栏目: 教程
