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

简介: Annotation 注解注入注解:@Autowired 注入1.加在set方法上, 默认按类型by type,如果在 spring 容器中能够找到多个相同的类型,就从这多个类型找查找有没有一个key的值跟我们的 ...

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

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

目录
相关文章
|
15天前
|
Java API 数据安全/隐私保护
掌握Spring Boot中的@Validated注解
【4月更文挑战第23天】在 Spring Boot 开发中,@Validated 注解是用于开启和利用 Spring 的验证框架的一种方式,特别是在处理控制层的输入验证时。本篇技术博客将详细介绍 @Validated 注解的概念和使用方法,并通过实际的应用示例来展示如何在项目中实现有效的数据验证
26 3
|
16天前
|
前端开发 Java 开发者
深入理解Spring Boot中的@Service注解
【4月更文挑战第22天】在 Spring Boot 应用开发中,@Service 注解扮演着特定的角色,主要用于标识服务层组件。本篇技术博客将全面探讨 @Service 注解的概念,并提供实际的应用示例,帮助开发者理解如何有效地使用这一注解来优化应用的服务层架构
66 1
|
16天前
|
Java 开发者 Spring
深入理解Spring Boot的@ComponentScan注解
【4月更文挑战第22天】在构建 Spring Boot 应用时,@ComponentScan 是一个不可或缺的工具,它使得组件发现变得自动化和高效。这篇博客将详细介绍 @ComponentScan 的基本概念、关键属性及其在实际开发中的应用。
28 4
|
17天前
|
Java 开发者 Spring
深入理解 Spring Boot 中的 @EnableAutoConfiguration 注解:概念与实践
【4月更文挑战第21天】在 Spring Boot 项目中,@EnableAutoConfiguration 注解是实现自动配置的核心,它可以根据项目的依赖和配置,自动地配置 Spring 应用程序中的 Bean
32 3
|
18天前
|
Java API 网络架构
深入理解 Spring Boot 中的 @RestController 注解:概念与实践
【4月更文挑战第20天】在现代Web开发中,创建RESTful服务已成为常态。Spring Boot通过提供@RestController注解,极大简化了REST API的开发过程。本篇博客旨在详细介绍@RestController的概念、优势以及在Spring Boot项目中的具体应用方法。
31 8
|
18天前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
33 6
|
18天前
|
XML Java 数据库
探索 Spring Boot 中的 @Configuration 注解:核心概念与应用
【4月更文挑战第20天】在 Spring Boot 项目中,@Configuration 注解扮演了一个关键角色,它标识一个类作为配置源,这些配置用于定义和管理 Spring 应用程序中的 Bean
40 7
|
13天前
|
缓存 Java Sentinel
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
|
23小时前
|
JavaScript Java 开发者
Spring Boot中的@Lazy注解:概念及实战应用
【4月更文挑战第7天】在Spring Framework中,@Lazy注解是一个非常有用的特性,它允许开发者控制Spring容器的bean初始化时机。本文将详细介绍@Lazy注解的概念,并通过一个实际的例子展示如何在Spring Boot应用中使用它。
10 2
|
2天前
|
运维 Java 程序员
Spring5深入浅出篇:基于注解实现的AOP
# Spring5 AOP 深入理解:注解实现 本文介绍了基于注解的AOP编程步骤,包括原始对象、额外功能、切点和组装切面。步骤1-3旨在构建切面,与传统AOP相似。示例代码展示了如何使用`@Around`定义切面和执行逻辑。配置中,通过`@Aspect`和`@Around`注解定义切点,并在Spring配置中启用AOP自动代理。 进一步讨论了切点复用,避免重复代码以提高代码维护性。通过`@Pointcut`定义通用切点表达式,然后在多个通知中引用。此外,解释了AOP底层实现的两种动态代理方式:JDK动态代理和Cglib字节码增强,默认使用JDK,可通过配置切换到Cglib