「java注解注入」java自动注入注解

博主:adminadmin 2023-01-11 10:51:08 962

今天给各位分享java注解注入的知识,其中也会对java自动注入注解进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java 什么是注解及注解原理详细介绍

1、注解是针对Java编译器的说明。

可以给Java包、类型(类、接口、枚举)、构造器、方法、域、参数和局部变量进行注解。Java编译器可以根据指令来解释注解和放弃注解,或者将注解放到编译后的生成的class文件中,运行时可用。

2、注解和注解类型

注解类型是一种特殊的接口类型,注解是注解注解类型的一个实例。

注解类型也有名称和成员,注解中包含的信息采用键值对形式,可以有0个或多个。

3、Java中定义的一些注解:

@Override 告诉编译器这个方法要覆盖一个超类方法,防止程序员覆盖出错。

@Deprecated 这个标识方法或类(接口等类型)过期,警告用户不建议使用。

@SafeVarargs JDK7新增,避免可变参数在使用泛型化时候警告”执行时期无法具体确认参数类型“,当然,也可以用@SuppressWarnings来避免检查,显然后者的抑制的范围更大。

@SuppressWarnings(value={"unchecked"}) 抑制编译警告,应用于类型、构造器、方法、域、参数以及局部变量。 value是类型数组,有效取值为:

all, to suppress all warnings

boxing, to suppress warnings relative to boxing/unboxing operations

cast, to suppress warnings relative to cast operations

dep-ann, to suppress warnings relative to deprecated annotation

deprecation, to suppress warnings relative to deprecation

fallthrough, to suppress warnings relative to missing breaks in switch statements

finally, to suppress warnings relative to finally block that don't return

hiding, to suppress warnings relative to locals that hide variable

incomplete-switch, to suppress warnings relative to missing entries in a switch statement (enum case)

javadoc, to suppress warnings relative to javadoc warnings

nls, to suppress warnings relative to non-nls string literals

null, to suppress warnings relative to null analysis

rawtypes, to suppress warnings relative to usage of raw types

restriction, to suppress warnings relative to usage of discouraged or forbidden references

serial, to suppress warnings relative to missing serialVersionUID field for a serializable class

static-access, to suppress warnings relative to incorrect static access

static-method, to suppress warnings relative to methods that could be declared as static

super, to suppress warnings relative to overriding a method without super invocations

synthetic-access, to suppress warnings relative to unoptimized access from inner classes

unchecked, to suppress warnings relative to unchecked operations

unqualified-field-access, to suppress warnings relative to field access unqualified

unused, to suppress warnings relative to unused code and dead code

4、注解的定义

使用 @interface 关键字声明一个注解

public @interface MyAnnotation1

注解中可以定义属性

String name default “defval”;

value是注解中的特殊属性

注解中定义的属性如果名称为 value, 此属性在使用时可以省写属性名

例如,声明一个注解:

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnno1 {

String msg();

int value();

}

java 线程方面的几个注解

1.方法一:在初始化时保存ApplicationContext对象

代码:

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");

ac.getBean("beanId");

说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。

2.方法二:通过Spring提供的工具类获取ApplicationContext对象

代码:

import org.springframework.web.context.support.WebApplicationContextUtils;

ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);

ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);

ac1.getBean("beanId");

ac2.getBean("beanId");

说明:

这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。

上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。

其中 servletContext sc 可以具体 换成 servlet.getServletContext()或者 this.getServletContext() 或者 request.getSession().getServletContext(); 另外,由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出 WebApplicationContext 对象: WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

3.方法三:继承自抽象类ApplicationObjectSupport

说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。

Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

4.方法四:继承自抽象类WebApplicationObjectSupport

说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext

5.方法五:实现接口ApplicationContextAware

说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。

Spring初始化时,会通过该方法将ApplicationContext对象注入。

java spring自定义注解注入属性注入不进去

不知道你说的“普通的java类”是什么。

在spring里要注入的话,相应的类都要纳入spring的管理,对象由spring创建,对象从spring获取。就像你上面的BaseDaoImpl和BaseServiceImpl。

如果UserCarManager也是由spring管理的话,那同样适用@autowired就可以注入。

看你的提问,应该是指没有纳入spring管理的类如何注入spring管理的对象,这种情况可以用srping相关的静态方法达到目的。

比如:

WebApplicationContext webAppContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());

BaseDaoImpl baseDao = (BaseDaoImpl) BeanFactoryUtils.beanOfTypeIncludingAncestors(webAppContext, BaseDaoImpl.class);

java注解@Resource机制怎么取到注入过的Bean

java注解@Resource机制如何取到注入过的Bean

SSH2项目整合案例

在ApplicationContext.xml中Spring注入Bean(以BaseDao为类),以下两种方法通过Java Application测试:

第一种:

ApplicationContext act = new ClassPathXmlApplicationContext("ApplicationContext.xml");

baseDao = act.getBean("baseDao");

System.out.println(baseDao);

测试结果:打印出来不为空,即已经成功取得对象。

第二种:

首先已经在ApplicationContext.xml添加了context:annoation-config /

//定义属性

@Resource

BaseDao baseDao;

//测试方法

System.out.println(baseDao);

测试结果:打印出来为空。

但是我Tomcat启动后,通过浏览器访问,在Debug模式下,查看baseDao的确可以获取到,为什么Java Application测试却不能获取。

我一个小猜测:是不是@Resource注解依赖Tomcat服务器运行。

[解决办法]

@Resource

是运行时注入,要依赖WEB容器。

第一种配置文件其实是通过XML文件直接构造BEAN

[解决办法]

LS别误导人...

@Resource和@Autowired

是spring用来做注解式注入的标记

区别在于resource按照名称装配,autowired按照类型装配

resource标记是java5的一部分,autowired是spring自身的标记,autowired也可以配合Qualifier达到名称装配的目的

在app项目应用spring自动装配应该在xml中配置

context:component-scan base-package="com.project.***" /

这个才是注解自动扫描的配置

context:annoation-config /

这个标记主要用在spring-mvc中

[解决办法]

没有看我说的吗...

依赖注入完全不需要依靠应用服务器

IoC是Spring框架核心的一部分

[解决办法]

应用本身不对所依赖的进行创建和管理。交给第三方容器来处理。

[解决办法]

ApplicationContext act = new ClassPathXmlApplicationContext("ApplicationContext.xml");

第二种有这一句么?如果没有的话 Spring 怎么会帮你注入呢?

[解决办法]

不知道lz是否用的spring 3.0.x,既然用全注解,写testcase,那么按照标准的目录结构来看,应该是在src/test/java/和src/test/resources中写testcase和存放资源文件。

那么,

在你的testcase中,

class上面应该有这样的类似描述:

XML code@RunWith(SpringJUnit4ClassRunner.class) //指定测试用例的运行器 这里是指定了Junit4//指定Spring的配置文件 /为classpath下@ContextConfiguration({"/liehuo-applicationContext-DAO.xml", "/liehuo-applicationContext-Service.xml", "/liehuo-applicationContext-Transaction.xml", "/liehuo-applicationContext-DataSource.xml"}) //指定Spring的配置文件 /为classpath下 //@Transactional //对所有的测试方法都使用事务,并在测试完成后回滚事务 //@Rollback(false) //这里设置为false,就让事务不回滚public class DAOTestCase extends AbstractTransactionalJUnit4SpringContextTests{ protected Log logger = LogFactory.getLog(getClass()); public DAOTestCase(){ }}

[解决办法]

只要启动了spring容器,就可以使用注解注入。不一定要web容器的。

但是你必须在类上标注@Service ,@Repository之类的 让spring管理类。

@Resource 是java定义的规范,不单可一注入spring的资源,

也可以按jndi注入ejb对象

[解决办法]

需要添加:

context:component-scan base-package="com.project.***" /

让spring扫描。

java注解注入的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java自动注入注解、java注解注入的信息别忘了在本站进行查找喔。