Spring入门(4)--基于注解管理Bean

一、基于注解管理Bean

1.概述:

从Java5开始,Java增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。

2.配置流程:

(1)引入相关依赖

(2)开启组件扫描:

Spring默认不使用注解装配Bean,因此我们需要在Spring的XML配置中,通过context:component-scan元素开启Spring Beans的自动扫描功能。开启此功能后,Spring会自动从扫描指定的包(back-package属性设置)及其子包下的所有类,如果类上使用了@Component注解,就将该类装配到容器中。

注意要在xml文件中配置context作用域。

<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-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启组件扫描-->
    <context:component-scan base-package="your pakagename"> </context:component-scan>
</beans>

(3)使用注解定义Bean

Spring提供了以下多个注解,这些注解可以直接标注在Java类上,将它们定义成Spring Bean。

注解说明
@Component该注解用于描述Spring中的Bean,是一个泛化的概念,仅仅表示容器的一个组件(Bean),并且可以作用在应用的任何层次,例如Service层,Dao层等。使用时只需将该注解标注在相应的类上即可。
@Repository该注解用于将数据访问层(Dao层)的类标识为Spring中的Bean,其功能与@Component相同。
@Service该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring中的Bean,其功能与@Component相同。
@Controller该注解通常作用在控制层(如SpringMVC的Controller),用于将控制层的类标识为Spring中的Bean,其功能与@Component相同。

各个组件中的(value = "xxx")中,value值就相当于使用xml配置bean中的id值。

package com.atguigu;

import org.springframework.stereotype.Component;

//在测试类中,用context.getBean("user")来获取bean
@Component(value = "user")
public class User {
    public User(){
        System.out.println("创建了用户对象");
    }
}

二、@Autowired注入

1.单独使用@Autowired注解,默认根据类型装配

2.注入方式:

(1)通过属性注入:根据类型找到对应类对象,完成注入

@Autowire
private UserDao userDao;

(2)set方法注入

private UserDao userDao

@Autowired
public void setUserDao(UserDao userDao){
    this.userDao = userDao;
}

(3)构造方法注入

@Autowired
public UserServiceImpl(UserDao userDao){
    this.userDao = userDao;
}

(4)当只有一个构造函数时,可以不加注解

三、@Resource注入

1.概念:

@Resource注解也可以完成属性注入。它和@Autowired注解有什么区别?

Resource注解是JDK扩展包中的,也就是说属于JDK的一部分。所以该注解是标准注解,更具有通用性。
@Autowired注解是Spring框架自己的
@Resource注解默认根据属性名称装配byName,未指定name时,使用属性名作为name。通过name找不到的话会自动通过类型byType装配。
@Autowired注解默认根据类型装配byType。如果想根据名称装配,需要配合@Qualifier一起使用。

@Resource注解用在属性上、setter方法上。
@Autowired注解用在属性上、setter方法上、构造方法上、构造方法参数上。

@Resource注解属于JDK扩展包,需要额外引入依赖:

        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.1</version>
        </dependency>

四、全注解式开发

添加配置类,实现对注解的扫描,替代在xml文件中的组件扫描。

package com.atguigu;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration//配置类
@ComponentScan("com.atguigu")
public class Config {
}

现在,直接在测试类中加载配置类就可以扫描并获取bean。

package com.atguigu;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        //加载配置类
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        User user = context.getBean(User.class);
        System.out.println(user);
    }
}

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot中,AOP(面向切面编程)是一种强大的技术,可以在不修改原始代码的情况下增强应用程序的功能。它是一种编程范式,可以将横切关注点(例如日志记录、事务管理、安全性等)从应用程序的主逻辑中分离出来。 以下是在Spring Boot中使用AOP的入门步骤: 1. 添加依赖 您需要在pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> ``` 2. 创建一个切面类 您需要创建一个切面类来定义要应用于应用程序的横切关注点。切面类应该使用@Aspect注解进行注释,并且应该包含一个或多个使用@Before、@After、@Around等注解进行注释的通知方法。 例如,以下是一个简单的切面类: ```java @Aspect @Component public class MyAspect { @Before("execution(* com.example.demo.MyService.*(..))") public void beforeAdvice() { System.out.println("Before advice called."); } @After("execution(* com.example.demo.MyService.*(..))") public void afterAdvice() { System.out.println("After advice called."); } } ``` 在上面的示例中,@Before和@After注释用于定义在执行MyService类中的任何方法之前和之后要执行的通知方法。 3. 将切面类注册到Spring Boot应用程序中 您需要将切面类注册到Spring Boot应用程序中,以便它可以在应用程序执行期间应用于横切关注点。您可以使用@Configuration注解或@ComponentScan注解来注册切面类。 例如,以下是使用@Configuration注解注册切面类的示例: ```java @Configuration @EnableAspectJAutoProxy public class AppConfig { @Bean public MyAspect myAspect() { return new MyAspect(); } } ``` 在上面的示例中,@EnableAspectJAutoProxy注解用于启用Spring Boot的自动代理功能,以便Spring Boot可以在运行时创建代理对象。@Bean注解用于将MyAspect类注册为Spring Boot应用程序的bean。 4. 测试切面 一旦您已经注册了切面类并启用了自动代理功能,您可以测试切面是否按预期工作。您可以创建一个MyService类来模拟应用程序的主逻辑,并在其中调用一个或多个方法。 例如,以下是一个简单的MyService类: ```java @Service public class MyService { public void doSomething() { System.out.println("Doing something."); } } ``` 在上面的示例中,MyService类具有一个名为doSomething()的方法,用于模拟应用程序中的主逻辑。 您可以创建一个Spring Boot测试类来测试切面是否按预期工作。例如,以下是一个简单的测试类: ```java @RunWith(SpringRunner.class) @SpringBootTest public class MyServiceTest { @Autowired private MyService myService; @Test public void testDoSomething() { myService.doSomething(); } } ``` 在上面的示例中,@Autowired注解用于将MyService类注入到测试类中。在testDoSomething()方法中,您可以调用MyService类的doSomething()方法,以便切面可以应用于该方法。 如果一切正常,您应该在控制台上看到以下输出: ``` Before advice called. Doing something. After advice called. ``` 这表明切面已成功应用于doSomething()方法,并且切面中定义的通知方法已成功调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值