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的名字;

实质没有任何区别,功能都一样,在哪个层都可以随意调用,但推荐尽量遵从规范。

收藏 打印