zoukankan      html  css  js  c++  java
  • 【Spring】的【Bean】管理(注解)【四个相同功能的注解】

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

    • 注解:代码里面特殊的标记,使用注解也可以完成一些相关的功能。
    • 注解写法:@注解名称(属性名称=属性值)
    • 注解使用在类、方法、属性上面

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

      1.创建类,创建方法

    1 public class User {
    2     public void add(){
    3         System.out.println("add-----------");
    4     }
    5 }

      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;

     

     

     

  • 相关阅读:
    使用Windbg调试.Net应用程序 [转]
    jquery的$.extend和$.fn.extend作用及区别
    java获取ip
    在IDEA中使用MyBatis Generator逆向工程生成代码
    github结合TortoiseGit使用sshkey,无需输入账号和密码
    Mapped Statements collection does not contain value for com.xxxx.dao.impl.AreaDAOImpl.findByCode
    idea设置tomcat虚拟路径的两种方法
    spring MVC中传递的参数对象中包含list的情况
    PowerDsigner 16逆向工程导入mysql
    [C++]Qt文本操作(按行读写)
  • 原文地址:https://www.cnblogs.com/angelye/p/7384133.html
Copyright © 2011-2022 走看看