`
郑云飞
  • 浏览: 817299 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring 注解中,普通类获取@Service标记的方法 或者bean对象

    博客分类:
  • ylcf
 
阅读更多

使用Spring框架,我们不需要创建类的对象,都有Spring 容器创建,并通过注解来注入。注入的原理就是在程序启动的时候,Spring根据xml中配置的路径来扫描类,如果发现类的上方有类似@Service,@Controller,此时就会定位到当前类,然后来给当前类中标有注解的属性进行注入,从而我们可以使用该属性,调用方法。

那么普通类怎么使用@Service标记的方法呢?

1.如果你想用@autowired,那么这个类本身也应该是在spring的管理下 的,即你的UserLogUtil也要标注为一个component(或Service),这样spring才知道要注入依赖; 
2. 如果不标注为@Component的话,此时不能通过@autowired来注入依赖,只能通过ApplicationContext来取得标注为Service的类: 
UserLogService service = ApplicationContext.getBean(UserLogService.class);

那么Web项目中如何获取ApplicationContext

1.

ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)

 2.

ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)

 注:至于获取ServletContext对象,可以从request,session中获取,他们都有getServletContext()方法

3 写一个工具类实现ApplicationContextAware接口,并将这个加入到spring的容器(推荐)

package com.ylcf.before.ylcf.base.sys.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
 * @author zhengyunfei
 * @create 2018-02-08-下午 21:34
 **/
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    public static ApplicationContext  getApplicationContext(){
        return applicationContext;
    }

    public static Object getBean(String beanName){
        return applicationContext.getBean(beanName);
    }

    public static Object getBean(Class c){
        return applicationContext.getBean(c);
    }
}
 

然后将此bean注册到spring 的容器中,在spring的配置文件添加如下代码

<bean id="springContextUtil" class="com.ncut.ssm.util.SpringContextUtil"></bean>

 

最后在普通类就可以这样调用

ApplicationContext appCtx = SpringContextUtil.getApplicationContext();
UserService bean = (UserService)SpringContextUtil.getBean("UserService");

或者

ApplicationContext appCtx = SpringContextUtil.getApplicationContext();
UserService bean = (UserService)SpringContextUtil.getBean(UserService.class);

第一种情况适用于在@Service(“”UserService” “)标注了bean的名字

@Service("UserService")
public class UserServiceImpl implements UserService {

第二种情况适用于在@Service后面什么也没有

@Service
public class UserServiceImpl implements UserService {

这种情况下不能使用UserServcieImpl.class,而是要用其接口类UserService.class,因为UserServiceImpl 没有被其他类注入过,会报找不到这个class

 

分享到:
评论

相关推荐

    spring注解 -----最简单的注解与自动装配例子

    在“testannotation”这个文件中,可能包含了一些示例代码,如测试类、配置类或者带有注解的业务类。通过分析这些代码,我们可以更好地理解Spring注解的使用和自动装配的工作原理。 总的来说,Spring注解极大地简化...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    在Spring Boot框架中,普通类调用bean是常见的操作,特别是在构建复杂应用时。这篇博客“17. Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中...

    spring 注解注意事项、值的接受传递不同方式

    @Component、@Service、@Repository和@Controller分别用于标记普通bean、业务层bean、数据访问层bean和控制器层bean,它们都是@Component的子注解,方便进行组件的分类。使用这些注解时,记得在Spring配置文件中启用...

    spring注解大全整理.docx

    * @Async:注解在方法上标示这是一个异步方法,在类上标示这个类所有的方法都是异步方法 七、计划任务 * @EnableScheduling:注解在配置类上,开启对计划任务的支持 * @Scheduled:注解在方法上,声明该方法是计划...

    Spring 注解学习手札(一) 构建简单Web应用

    在本篇《Spring注解学习手札(一)构建简单Web应用》中,我们将深入探讨如何使用Spring框架的注解来构建一个基本的Web应用程序。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛应用。它简化了依赖注入、...

    spring注解文档

    Spring注解是Spring框架中的一种核心特性,它极大地简化了配置和对象的管理。通过注解,开发者可以在类和方法级别声明对象的行为和依赖关系,从而避免了XML配置的繁琐。下面将详细介绍Spring注解的使用及其相关知识...

    spring自动扫描和管理Bean的示例

    1. **@Component**:这是最基础的注解,用于标记一个普通的Java类为Spring Bean。如果你的类没有特定的角色,可以使用此注解。 2. **@Service**:通常用于标记业务逻辑层的类。它继承自@Component,添加了一些默认...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    这些注解可以用于标记任何普通的Java类,声明它们为Spring Bean。`@Component`用于通用组件,`@Service`用于业务层,`@Repository`用于数据访问层。 2. **`@Autowired`注入**:当Bean被自动扫描后,Spring可以使用`...

    spring的配置注解

    `@Component`是Spring中最基础的注解,它可以将一个普通的Java类声明为Spring的Bean。当你在类上使用`@Component`时,Spring会自动发现这个类并将其注册到IoC容器中。例如: ```java @Component public class ...

    java spring 框架及注解 总结

    1. `@Component`:这是Spring中的基础注解,用于标记一个类为Bean,通常用于普通POJO对象。Spring会自动扫描并管理这类Bean。 2. `@Service` 和 `@Repository`:这两个注解是 `@Component` 的特化版,主要用于业务...

    Spring应用注解完成属性装配

    在Spring框架中,属性装配是将配置文件中的属性值注入到Bean对象中,使得对象能够根据配置信息正确地运行。Spring提供了多种方式进行属性装配,包括XML配置、基于注解的配置以及自动装配。本篇文章主要关注的是使用...

    spring注解

    `@Component`是最基础的注解,可以用来标记任何普通的Java类。`@Service`、`@Repository`和`@Controller`则分别用于标记服务层、数据访问层和表现层的类,它们是在`@Component`基础上的特化。通过`@ComponentScan`...

    Spring系列之Spring常用注解总结.docx

    1. `@Component`:这是Spring中的基础组件注解,用于标记一个普通的Java类作为Spring管理的Bean。例如,可以将`Zoo`类标记为`@Component`,然后Spring会自动发现并管理它。 ```java @Component public class Zoo { ...

    spring2.5基于注解例子程序

    例如,`@Component`用于标记一个普通的Java类作为Spring管理的bean,而`@Controller`则用于标记Web层的控制器类。 2. **自动扫描**: Spring 2.5引入了自动扫描功能,通过`@ComponentScan`注解,Spring容器可以...

    Spring Annotation简介一

    `@Bean`注解的方法会返回一个对象,该对象会被Spring容器管理。 4. **条件注解(Conditional Annotation)**:如`@Conditional`,可以根据某些条件决定是否创建bean。这对于实现环境感知或多环境配置非常有用。 5....

    Spring Ioc 注解 依赖注入

    - **@Component**:用于标记一个普通的Java类为Spring管理的Bean。 - **@Service**:通常用于标记业务层的组件。 - **@Repository**:用于标记数据访问层(DAO层)的组件。 - **@Controller**:用于标记Web层的组件...

    Spring3.0中Annotion实例

    这些注解分别用于标记普通的bean、服务层bean、数据访问层bean和控制器层bean。 3. **AOP(面向切面编程)**:`@Aspect`定义了一个切面,`@Before`、`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`注解...

    IOC之基于注解的配置bean(下)

    - `@Component`:这是一个基础注解,用于标记一个普通的Java类作为Spring的bean。`@Service`、`@Repository`和`@Controller`是它的特殊形式,分别对应服务层、数据访问层和视图层。 - `@Autowired`:这个注解用于...

    java注解大全(非常全面)

    本资料集合了多种类型的注解,包括普通Java注解、Hibernate注解、Spring注解以及Struts2注解,对学习注解的开发者来说是一份宝贵的资源。 1. 普通Java注解: Java标准库提供了若干内置注解,如`@Override`用于指示...

Global site tag (gtag.js) - Google Analytics