Annotation第一步

本文探讨了Spring框架中注解配置与XML配置的应用及优缺点。介绍了如何在项目中结合使用这两种配置方式,以及一些常见注解如@Autowired和@Qualifier的具体用法。

问题描述:

Annotation or xml?
从Spring2.0以后的版本中,Spring也引入了基于注解(Annotation)方式的配置,开发人员对注解(Annotation)的态度也是萝卜青菜各有所爱,个人认为注解可以大大简化配置,提高开发速度,同时也不能完全取代XML配置方式,XML方式更加灵活,并且发展的相对成熟,这种配置方式为大多数 Spring 开发者熟悉;注解方式使用起来非常简洁,但是尚处于发展阶段,XML配置文件和注解(Annotation)可以相互配合使用。

注解其实也没什么神秘的,和XML配置文件类似都是一种配置的方式而已,只不过利用JDK的反射机制,在编译时或者运行时动态获取所配置的信息而已,注解本身只是个标识,注解的真正意义在于通过注解标识获取注解所在对象的信息以及注解中配置的信息。

Spring的注解方式只是简化了XML配置文件,在读入Bean定义资源时可以动态扫描给定的路径,在解析和依赖注入时,XML方式配置的Bean,Spring需要解析XML文件,注解方式配置的Bean,Spring需要通过JDK的反射机制获取注解配置的信息。

具体实现:

1.导入spring-context-2.5.xsd的jar包,同时xml文件里新增xsd元数据文件

Eclipse的XML catalog里添加spring-context-2.5.xsd元数据文件

<?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-2.5.xsd
           <!--新增-->
           http://www.springframework.org/schema/context
           <!--新增-->
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
           <!--新增-->
       <context:annotation-config/>
    <bean id="u" class="com.dao.impl.UserDaoImpl" scope="prototype">
    </bean>

    <bean id="userService" class="com.service.UserService" autowire="byType" init-method="init" destroy-method="destroy" scope="prototype">
    </bean>
    </beans>    

中间加这一句,指XML文件的命名空间(namespace—ns)中以context开头的可以写的内容去标识的网站http://www.springframework.org/schema/context里找。

2.@Autowired 注解
@Autowired 注解可以用于“传统的”setter 方法,也可以用于以属性为参数/多个参数的方法。
Autowired注解
a) 默认按类型byType注入
b) 如果想用byName,使用@Qulifier
c) 写在private field(第三种注入形式)(不建议,破坏封装)
d) 如果写在set上,@qualifier需要写在参数上

UserService的setUserDao中增加@Autowired注解,注入userDao的bean。

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

3.测试类

@Test
    public void testAdd() throws Exception {

        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
        UserService service = (UserService) ctx.getBean("userService");
        service.add(new User());
    }

运行时报错

org.springframework.beans.factory.BeanDefinitionStoreException:

 Unexpected exception parsing XML document from class path resource [beans.xml]; 

 nested exception is java.lang.IllegalStateException: 

 Context namespace element 'annotation-config' and its parser class 
 [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser] 
 are only available on JDK 1.5 and higher

主要是由于spring-framework-2.5.6 不支持泛型,可以将spring的jar升级为3.0版本或将jdk版本降级【在该项目properties中配置低版本jdk即可】

4.用Qualifier指定bean的id
AutowiredAnnotationBeanPostProcessor默认以byType方式注入bean,如果出现了两个类型相同的bean,则需要@Qualifier注解。

@Overwrite这种注解是JVM虚拟机处理,而@Autowired不是JVM处理的,是由以下四个bean处理的。
(隐式注册 post-processors 包括了 AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,也包括了前面提到的 RequiredAnnotationBeanPostProcessor。)

XML文件:

<bean id="u" class="com.dao.impl.UserDaoImpl">
</bean>
<bean id="u2" class="com.dao.impl.UserDaoImpl">
</bean>

【配置windows-perferences-editor-content assist的Auto Activition值为200、.@与#即可出现@后的提示】

UserService.java用Qualifier注解指定bean的id

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

同时,@Required注解跟@Overwrite一样,写不写都行。

再次强调,spring开发手册很重要,要学会怎么学习与使用开发手册

<think>好的,用户现在的问题是关于如何在IntelliJ IDEA中添加Google Ads API依赖来进行接口开发。他们之前已经询问过如何创建这样的接口,而我的回答涵盖了从环境准备到代码实现的多个步骤,其中重点提到了使用Maven添加依赖。现在用户想更具体地了解如何添加API依赖,可能是他们在实际操作中遇到了困难,或者想确认步骤的正确性。 首先,我需要回顾之前的回答,确保现在的回答与之前的指导一致。在之前的指南中,我提到了在Maven项目的pom.xml文件中添加Google Ads API的依赖,版本是24.0.0。用户现在可能希望得到更详细的步骤,特别是如何在IDEA中操作。 接下来,我需要考虑用户可能的背景。他们可能对Maven或Gradle不太熟悉,或者对IDEA的界面操作不太熟练。因此,步骤需要详细且按部就班,包括如何打开项目、找到pom.xml文件、添加依赖、刷新项目等。同时,要提醒用户注意版本号,可能需要查看最新版本以确保兼容性。 另外,用户提供的引用内容中提到了Java IDE如Eclipse,但用户现在使用的是IDEA,所以需要专注于IDEA特有的操作步骤。引用中的其他内容,比如Alibaba Dragonwell、Flame游戏引擎和HTML5,可能与当前问题无关,但需要确认用户是否有其他潜在需求。不过根据当前问题,重点应放在Maven依赖的添加。 用户可能还遇到了依赖无法下载或配置错误的问题,因此需要包含常见问题的解决方法,比如检查网络、Maven镜像设置、版本是否正确等。此外,用户可能需要知道如何验证依赖是否成功添加,比如查看外部库或运行Maven编译命令。 另外,用户可能在使用过程中遇到依赖冲突或其他构建问题,所以建议他们使用IDEA的Maven工具来清理和重新加载项目。同时,提醒他们在代码中正确导入相关类,避免因依赖未正确加载而导致的编译错误。 最后,确保回答结构清晰,分步骤说明,并附带截图或代码示例,这样用户能更直观地跟随操作。同时,链接到官方文档可以帮助用户进一步查阅最新信息。</think>### 在IntelliJ IDEA中添加Google Ads API依赖的详细步骤 #### 一、通过Maven添加依赖(推荐方式) 1. **打开`pom.xml`文件** - 在项目视图中找到`pom.xml`(位于项目根目录) - 右键文件选择"Open"或直接双击编辑 2. **添加依赖配置** ```xml <dependencies> <!-- Google Ads API核心库 --> <dependency> <groupId>com.google.api-ads</groupId> <artifactId>google-ads</artifactId> <version>25.0.0</version> <!-- 建议使用最新版本 --> </dependency> <!-- 可选:日志支持 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> </dependency> </dependencies> ``` *注:版本号可查看[官方发布记录](https://developers.google.com/google-ads/api/docs/release-notes)更新* 3. **触发依赖下载** - 点击IDEA右侧Maven工具栏的刷新按钮(![Maven刷新图标](https://img.icons8.com/fluency/24/000000/refresh.png)) - 或执行命令:`mvn clean install` #### 二、通过Gradle添加(备选方案) 1. 打开`build.gradle`文件 2. 在`dependencies`块添加: ```gradle implementation 'com.google.api-ads:google-ads:25.0.0' implementation 'org.slf4j:slf4j-simple:1.7.36' ``` #### 三、依赖验证步骤 1. 查看已加载的库 - 展开项目结构中的`External Libraries` - 确认存在`google-ads-25.0.0.jar`等文件 2. 创建测试类验证 ```java import com.google.ads.googleads.lib.GoogleAdsClient; public class DependencyTest { public static void main(String[] args) { // 尝试实例化客户端 GoogleAdsClient client = GoogleAdsClient.newBuilder().build(); System.out.println("API依赖加载成功!"); } } ``` #### 四、配置增强建议 1. **代理设置(如需要)** ```xml <!-- 在pom.xml中添加仓库镜像 --> <repositories> <repository> <id>google-ads-maven-repo</id> <url>https://maven.pkg.github.com/googleads/google-ads-java</url> </repository> </repositories> ``` 2. **依赖关系图查看** - 右键点击`pom.xml`选择"Maven" > "Show Dependencies" - 查看库依赖关系(示例图:![依赖关系图](https://example.com/dependency-graph.png)) #### 五、常见问题处理 1. **依赖下载失败** - 检查网络连接和代理设置 - 尝试清理本地仓库:`mvn dependency:purge-local-repository` - 确认Maven镜像配置正确(推荐阿里云镜像) 2. **版本冲突** ```xml <!-- 排除冲突依赖示例 --> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> ``` 3. **SDK组件缺失** - 通过IDEA内置终端执行: ```bash mvn install:install-file -Dfile=path/to/google-ads.jar -DgroupId=com.google.api-ads -DartifactId=google-ads -Dversion=25.0.0 -Dpackaging=jar ``` #### 六、最佳实践建议 1. **版本管理策略** ```xml <properties> <google.ads.version>25.0.0</google.ads.version> </properties> <dependency> <groupId>com.google.api-ads</groupId> <artifactId>google-ads</artifactId> <version>${google.ads.version}</version> </dependency> ``` 2. **IDE智能提示优化** - 启用注解处理:`Settings > Build > Compiler > Annotation Processors` - 安装Protocol Buffers插件支持 --- ### 相关问题 1. 如何验证Google Ads API依赖是否正确加载? 2. 如何处理Java项目中多个API版本的依赖冲突? 3. 如何在IDEA中调试Google Ads API的认证流程?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值