当前位置: 首页 > news >正文

初识 Spring(05)---(Annotation注解)

Annotation 注解

注入注解:@Autowired 注入

1.加在set方法上, 默认按类型by type,如果在 spring 容器中能够找到多个相同的类型,就从这多个类型找查找有没有一个key的值跟我们的 set 方法的参数名相同,如果有,就注入;没有的话,就无法判断要注入哪一个,导致报错

如果想用byName,使用@Qulifie 需要写在参数上

文件目录

代码:配置文件: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.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-4.0.xsd">

	
		<context:component-scan base-package="com.neudeu.service,com.neuedu.dao"></context:component-scan>
	
</beans>

base-package="com.neudeu.service,com.neuedu.dao  扫描这两个包

Test.java

package com.neuedu.test;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
	
	}
 
}

UserDao.java

package com.neuedu.dao;

import org.springframework.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.springframework.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.springframework.beans.factory.annotation.Autowired;
import org.springframework.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.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.neudeu.service.UserService;
public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		UserService userService = ac.getBean(UserService.class);
		userService.save();
	}
 
}

输出:

set 注入 byName,按名称注入

修改代码:配置文件: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.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-4.0.xsd">

	
		<context:component-scan base-package="com.neudeu.service,com.neuedu.dao"></context:component-scan>
		<bean id="ud" class="com.neuedu.dao.UserDao"></bean>
</beans>

输出:byName,按名称注入

 

修改代码: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.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-4.0.xsd">

	
		<context:component-scan base-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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.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.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-4.0.xsd">

	
		<context:component-scan base-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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.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的名字;

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

相关文章:

  • win7系统已经够用为什么还要开发win10系统
  • python3 简单爬虫
  • HAP将新的页面加入到菜单
  • 常用的CSS各类属性
  • 从计算机知识到落地能力,你欠缺了什么?
  • 阿里云王牌架构师杨曦:N多环境N多应用个性配置管理如何从混乱到简单?
  • 小程序开发中的那些坑
  • Intellij idea 快捷键持续更新
  • 常用加密算法概述
  • CSS基础2-盒子模型、定位、浮动
  • 集群架构(1)
  • python全栈开发 * background 定位 z-index * 180813
  • Prism中命令可用性无法自动刷新
  • shell入门基础常见命令及用法
  • 高可用,高并发
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 07.Android之多媒体问题
  • android 一些 utils
  • Angular Elements 及其运作原理
  • echarts的各种常用效果展示
  • Linux Process Manage
  • log4j2输出到kafka
  • MD5加密原理解析及OC版原理实现
  • MYSQL 的 IF 函数
  • php中curl和soap方式请求服务超时问题
  • 聚簇索引和非聚簇索引
  • 面试遇到的一些题
  • 七牛云假注销小指南
  • 前端_面试
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 译有关态射的一切
  • mysql面试题分组并合并列
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ![CDATA[ ]] 是什么东东
  • #define用法
  • #Ubuntu(修改root信息)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (Java数据结构)ArrayList
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net IE10 _doPostBack 未定义
  • .NET Standard 的管理策略
  • .NET 发展历程
  • .net 流——流的类型体系简单介绍
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)