对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等,它们一般都是一些重复的代码,而lombok就是帮助我们生成这些重复代码的,对于一个IJ的工具来说,如果你不启动编译时注解功能,那么项目在build时会报错!

使用ehcache-spring-annotations开启ehcache的注解功能
金沙国际官网 1
使用ehcache-spring-annotations开启ehcache的注解功能时,
eclipse提示如下问题,求教怎么搞定~~~~

我们知道通常情况下,Struts2是通过struts.xml配置的。但是随着系统规模的加大我们需要配置的文件会比较大,虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写,然后通过<include>节点将不同的配置文件引入到最终的struts.xml文件中,但是毕竟还是要维护和管理这些文件,因此也会给维护工作带来很大的困扰。为了解决这个问题,可以考虑使用struts2的注解。实际上struts2中最主要的概念就是package、action以及Interceptor等等概念,所以只要明白这些注解就可以了。

【Spring】的【Bean】管理(注解)【四个相同功能的注解】

Highcharts图表的注解功能

在图表中,往往须要对图表总体或者部分元素进行对应注解。帮助浏览者阅读图表。尽管标签组labels能够实现类似的功能。可是其功能相对简单。要实现复杂的注解功能,用户能够借助第三方插件Annotations实现。

金沙国际官网 2
图表注解

加入的注解。能够有多种形式的边框,而且能够设置拖动功能。图标浏览者还能够通过注解工具栏手动加入注解。
PS:具体教程已经加入到《网页图表Highcharts实践教程基础篇》v1.2.3中。

开启build时的注释

 “Settings > Build >
Compiler > Annotation Processors”

金沙国际官网 3

然后再安装lombok插件

金沙国际官网 4

在项目里配置关于lombok的依赖项

compileOnly('org.projectlombok:lombok:1.16.20')

最后就可以在代码中使用lombok的注解了

/**
 * 用户实体
 *
* @Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
* @Setter:注解在属性上;为属性提供 setting 方法
* @etter:注解在属性上;为属性提供 getting 方法
* @og4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
* @oArgsConstructor:注解在类上;为类提供一个无参的构造方法
* @llArgsConstructor:注解在类上;为类提供一个全参的构造方法
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
    @Id
    private String id;
    @NotNull
    private String name;
    private String email;
}

好了,启用插件注解就说到这里,感谢阅读!

 

如果希望使用struts2的注解功能,必须使用一个包struts2-convention-plugin-2.1.8.1.jar,我使用的环境是struts2.1.8.1。如果你使用了不同的版本,找名字就行。

 

在以上所述的jar文件中定义了一系列的注解,其中比较主要的是:

  • 注解:代码里面特殊的标记,使用注解也可以完成一些相关的功能。
  • 注解写法:@注解名称(属性名称=属性值)
  • 注解使用在类、方法、属性上面
  • @ParentPackage,这个注解对应了xml文件中的package节点,它只有一个属性叫value,其实就是package的name属性;
  • @Namespace,命名空间,也就是xml文件中<package>的namespace属性;
  • @Action,这个注解对应<action>节点。这个注解可以应用于action类上,也可以应用于方法上。这个注解中有几个属性:

    • value(),表示action的URL,也就是<action>节点中的name属性;
    • results(),表示action的多个result;这个属性是一个数组属性,因此可以定义多个Result;
    • interceptorRefs(),表示action的多个拦截器。这个属性也是一个数组属性,因此可以定义多个拦截器;
    • params(),这是一个String类型的数组,它按照name/value的形式组织,是传给action的参数;
    • exceptionMappings(),这是异常属性,它是一个ExceptionMapping的数组属性,表示action的异常,在使用时必须引用相应的拦截器;
  • @Result,这个注解对应了<result>节点。这个注解只能应用于action类上。这个注解中也有几个属性:

    • name(),表示action方法的返回值,也就是<result>节点的name属性,默认情况下是【success】;
    • location(),表示view层文件的位置,可以是相对路径,也可以是绝对路径;
    • type(),是action的类型,比如redirect;
    • params(),是一个String数组。也是以name/value形式传送给result的参数;

 

实际上,struts2中的主要注解就是这些,当然了,还有上面提到的@interceptorRef和@exceptionMapping;基本上,掌握了这些注解就可以了。

  (注解可以替代配置文件,并非完全替代):

但是如果想让这些注解真正工作,必须在配置文件增加几个常量的定义:

  1.创建类,创建方法

  • struts.convention.default.parent.package:这个常量表示缺省的包名是什么,因为在实际应用中,我们常常定义一个缺省的包,这个包中定义了一大堆的拦截器等等,然后其他的包继承自这个包。这个常量可以配也可以不配;
  • struts.convention.package.locators:这个常量表示你的action类的java包的包名的后缀是啥:比如action。这个常量也可以不配;
  • struts.convention.package.locators.basePackage:这个常量表示你的action类的java包package的名字是啥;这个常量也可以不配;
1 public class User {
2     public void add(){
3         System.out.println("add-----------");
4     }
5 }

以上三个常量都是辅助作用的,为了让注解真正的工作,必须在配置文件中增加<package>节点的配置,至少是<package name=”myPackage”
extends=”struts-default” />,这样注解就可以使用了。

  2.创建spring配置文件,引入约束

1 <beans xmlns="http://www.springframework.org/schema/beans"
2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3     xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
4         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
5         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
6 </beans>

  3.配置开启注解扫描

 

 1 <!-- 
 2         开启注解扫描功能
 3         (1)到包里面扫描类、方法、属性上面是否有注解
 4      -->
 5     <context:component-scan base-package="com.anno"></context:component-scan>
 6 
 7 
 8 
 9 <!-- 只会扫描属性上面的注解,所以我们不用 -->
10     <context:annotation-config></context:annotation-config>

 

一、 使用注解创建对象

在创建对象的类上面使用注解实现

 

1 @Component(value="user")    //<bean id="" class="">
2 public class User {
3     public void add(){
4         System.out.println("add-----------");
5     }
6 }

 

写测试代码

1 @Test
2     public void testAno(){
3         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
4         User user = (User)applicationContext.getBean("user");
5         user.add();
6     }

   创建对象有四个注解,下面还有三个:

 

Spring中提供了@Component的三个衍生注解:(功能目前来说是一致的,都是用来创建对象)

@Controller

Web层

@Service

业务层

@Repository

持久层

这三个注解是为了让标注类本身用途清晰,spring在后续的版本中会对其增强。

 

  **创建对象单实例还是多实例  在类上面添加注解@scope**

 

1 @Component(value="user")    //<bean id="" class="">
2 @Scope(value="prototype")
3 public class User {
4     public void add(){
5         System.out.println("add-----------");
6     }
7 }

 

 

二、使用注解注入属性

 

第一种注解(很少用):@Autowired

 

需求:创建service类,创建dao类,在service得到dao对象

1 @Component(value="userdao")
2 public class UserDao {
3     public void add(){
4         System.out.println("dao--------------add");
5     }
6 }

 

@Service(value="userservice")
public class UserService {
    //得到dao对象
    //1定义dao类型属性
    //在dao属性上面使用注解完成对象注入 autowired代表自动装配/注入,注意这里的private UserDao userdao自动注入是根据类名注入的,和UserDao里面的注入对象没有任何关系
    @Autowired
    private UserDao userdao;
    //使用注解方式不需要set方法
    public void add(){
        System.out.println("service------------add");
        userdao.add();
    }
}

 

1 @Test
2     public void testService(){
3         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
4         UserService userService = (UserService)applicationContext.getBean("userservice");
5         userService.add();
6     }

 

第二种注解(经常用,因为能够准确注入)@Resource:

 

 

 1 @Service(value="userservice")
 2 public class UserService {
 3     //得到dao对象
 4     //1定义dao类型属性
 5     //2在dao属性上面使用注解完成对象注入 autowired代表自动装配
 6     //@Autowired
 7     //name属性值写注解创建的dao对象value值
 8     @Resource(name="userdao")
 9     private UserDao userdao;
10     //使用注解方式不需要set方法
11     public void add(){
12         System.out.println("service------------add");
13         userdao.add();
14     }
15 }

 

 

三、xml和注解方式混合使用

 

1、创建对象的操作使用配置文件方式实现;

 

1 public class BookDao {
2     public void book(){
3         System.out.println("book dao-----------");
4     }
5 }

 

 

1 public class OrderDao {
2     public void order(){
3         System.out.println("order dao-----------");
4     }
5 }

 

 1 public class BookService {
 2     //得到bookdao和orderdao对象
 3     @Resource(name="bookDao")
 4     private BookDao bookdao;
 5     @Resource(name="orderDao")
 6     private OrderDao orderdao;
 7     
 8     public void add(){
 9         System.out.println("bookservice");
10         bookdao.book();
11         orderdao.order();
12     }
13 }

配置文件

1 <!-- 配置对象 -->
2     <bean id="bookService" class="com.xmlanno.BookService"></bean>
3     <bean id="bookDao" class="com.xmlanno.BookDao"></bean>
4     <bean id="orderDao" class="com.xmlanno.OrderDao"></bean>

 

2、注入属性的操作使用注解实现

 

1 //得到bookdao和orderdao对象
2     @Resource(name="bookDao")
3     private BookDao bookdao;
4     @Resource(name="orderDao")
5     private OrderDao orderdao;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图