Spring ---annotation (重点)--AutoWired 不常用

1. 默认按类型 by type, 如果想用byname, 使用@Qualifier

2. 如果写在set上, @qualifier需要写在参数上

bean.xml:

默认bytype去找set方法, 注入

<?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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:annotation-config />
  <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl">
  </bean>
  <bean id="userService" class="com.bjsxt.service.UserService" >
  </bean>
</beans>

在set方法上加入@AutoWired:

package com.bjsxt.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
public class UserService {
	private UserDAO userDAO;
	public void init() {
		System.out.println("init");
	}
	public void add(User user) {
		userDAO.save(user);
	}
	public UserDAO getUserDAO() {
		return userDAO;
	}
	@Autowired
	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}
	public void destroy() {
		System.out.println("destroy");
	}
}

  

如果bytype找到2个bean , 参考下面的xml文件,可以在service文件里再加入@Qualifier标识符,

<?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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:annotation-config />
  <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl">
  </bean>
  <bean id="u2" class="com.bjsxt.dao.impl.UserDAOImpl">
  </bean> 

  <bean id="userService" class="com.bjsxt.service.UserService" >

  </bean>

</beans>

  

UserService.java:

package com.bjsxt.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;

public class UserService {
	private UserDAO userDAO;
	public void init() {
		System.out.println("init");
	}
	public void add(User user) {
		userDAO.save(user);
	}
	public UserDAO getUserDAO() {
		return userDAO;
	}
	@Autowired
	public void setUserDAO(@Qualifier("u") UserDAO userDAO) {
		this.userDAO = userDAO;
	}
	public void destroy() {
		System.out.println("destroy");
	}
}

  

  

时间: 2024-08-26 16:24:20

Spring ---annotation (重点)--AutoWired 不常用的相关文章

Spring ---annotation (重点)--Resource, Component 重要!!!

beans.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.springframew

spring Annotation 组件注入

spring 注解的分类 启动spring自己主动扫描功能 <context:component-scan/> [email protected]: 它用于将数据訪问层 (DAO 层 ) 的类标识为 Spring Bean.详细仅仅需将该注解标注在 DAO 类上就可以. 为什么 @Repository 仅仅能标注在 DAO 类上呢? 这是由于该注解的作用不仅仅是将类识别为 Bean,同一时候它还能将所标注的类中抛出的数据訪问异常封装为 Spring 的数据訪问异常类型. Spring 本身提供

Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义.解析,并对几个 Android 开源库 Annotation 原理进行简析.PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 完整版原文见:Java Android 注解(Ann

Spring 3.2 @Autowired异常:expected single matching bean but found 2

在使用Sping做单元测试时候,对RequestMappingHandlerAdapter(从处理器包装过来的适配器)进行自动装配, 发现报:expected single matching bean but found 2异常,意思是需要匹配单个Bean,但是却找到两个: 我在spring-servlet.xml中的确配置了一个,不知道第二个从哪里来的,一般这种情况下可以使用@Qualifier配合@Autowired来解决这些问题: 另外我预计是因为bean没有给id属性导致的,然后我在sp

Spring - Annotation Based Configuration

Starting from Spring 2.5 it became possible to configure the dependency injection using annotations. So instead of using XML to describe a bean wiring, you can move the bean configuration into the component class itself by using annotations on the re

Spring Annotation(@resource、@component)

1 package com.bxw.dao.impl; 2 3 import org.springframework.stereotype.Component; 4 5 import com.bxw.dao.UserDao; 6 import com.bxw.po.User; 7 8 @Component("userDao") 9 public class UserDaoImpl implements UserDao { 10 public void save(User u){ 11

Spring Annotation(@Autowire、@Qualifier)

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans 3 xmlns="http://www.springframework.org/schema/beans" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:xsi="http://www.w3.org/20

spring annotation功能备注

  @Autowired @Autowired 注释可以在 setter 方法中被用于自动连接 bean.以type方式进行匹配. 一个构造函数 @Autowired 说明当创建 bean 时,即使在 XML 文件中没有使用 元素配置 bean ,构造函数也会被自动连接.   映射方式1    对变量使用@Autowired,在xml中注入其他bean,可以在注入对象中省略配置类的成员变量 映射方式2    对set方法使用@Autowired,在xml中注入其他bean,可以在注入对象中省略配

【spring】spirng中的常用工具类

一.概述 很多时候,很多工具类其实spring中就已经提供,常用的工具类有: 参考:https://www.cnblogs.com/langtianya/p/3875103.html 内置的resouce类型 UrlResource ClassPathResource FileSystemResource ServletContextResource InputStreamResource ByteArrayResource EncodedResource 也就是Resource加上encodi