spring 第二天之注解方式创建对象以及属性注入

本文介绍了Spring框架中使用注解创建对象和注入属性的方法,包括@注解名称(属性名称=“属性值”)的写法,注解开发的准备工作,如导入jar和开启注解扫描。详细讲解了注解创建对象的步骤,以及通过@Resource和@Autowired注解进行属性注入的差异。同时,探讨了配置文件和注解混合使用的场景,总结了创建对象的四个注解和创建属性的两个注解的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring 注解方式创建对象以及属性注入

注解介绍
  • 代码里面的特素标记,使用注解可以完成功能
  • 注解写法 @注解名称(属性名称=“属性值”)
  • 注解使用在类、方法、属性上面

注解开发准备

1.导入jar
aop-jar包

2.创建类,创建方法

3.创建spring配置文件,引入新的约束

<?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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">


</beans>

4.开启注解扫描

 <!-- 开启注解:扫描到包里扫描类、方法、属性上面是否有注释
     -->
    <context:component-scan base-package="cn.itcast.anno"></context:component-scan>

    <!-- 只扫描属性上面的注解 -->
    <context:annotation-config></context:annotation-config>

注解创建对象

1.需要被创建的类

package cn.itcast.anno;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component(value = "user")  //相当于<bean id="user" class="cn.itcast.anno.User"/>
@Scope(value = "prototype") //多实例,视情况而定
public class User {
    public void add(){
        System.out.println("add...");
    }
}

2.配置文件

<?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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启注解扫描:包里扫描类、方法、属性上面是否有注释-->
    <context:component-scan base-package="cn.itcast.anno"></context:component-scan>

    <!-- 只扫描属性上面的注解 -->
    <context:annotation-config></context:annotation-config>

</beans>

3.测试类及方法

package cn.itcast.anno;

import cn.itcast.aop.Book;
import cn.itcast.xmlanno.BookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAnno {
 @Test
    public void testUser() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");

        User user = (User) context.getBean("user");

        System.out.println(user);
        user.add();
    }
}

注解注入属性之resource注入(常用)

1.创建service类,dao类,在service中得到dao对象

package cn.itcast.anno;

import org.springframework.stereotype.Component;

@Component(value = "userDao")
public class UserDao {
    public void add(){
        System.out.println("userDao...");
    }
}
package cn.itcast.anno;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component(value = "userService")
public class UserService {

    //得到UserDao对象
    //1.定义UserDao类型属性
    //在UserDao的属性上使用注解 完成对象注入
    @Resource(name = "userDao")
    private UserDao userDao;

    //使用注解方式不需要set方法
    public void add(){
        System.out.println("userSerice...");
        userDao.add();
    }
}

2.创建配置文件

<?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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启注解扫描:包里扫描类、方法、属性上面是否有注释 -->
    <context:component-scan base-package="cn.itcast.anno"></context:component-scan>

    <!-- 只扫描属性上面的注解 -->
    <context:annotation-config></context:annotation-config>

</beans>

3.测试类及方法

package cn.itcast.anno;

import cn.itcast.aop.Book;
import cn.itcast.xmlanno.BookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAnno {
 @Test
    public void testUserService() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = (UserService) context.getBean("userService");
        System.out.println(userService);
        userService.add();
    }
}

注解注入属性之 @Autowired

只需把类中的@resource注解换成@Autowired

package cn.itcast.anno;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component(value = "userService")
public class UserService {

    //得到UserDao对象
    //1.定义UserDao类型属性
    //在UserDao的属性上使用注解 完成对象注入
   @Autowired
    private UserDao userDao;

    //使用注解方式不需要set方法
    public void add(){
        System.out.println("userSerice...");
        userDao.add();
    }
}

配置文件和注解混合使用

  • 创建对象使用配置文件
  • 注入属性使用注解方式实现

1.创建类

package cn.itcast.xmlanno;

public class BookDao {

    public void book(){
        System.out.println("book...");
    }
}

package cn.itcast.xmlanno;

public class OrdersDao {

    public void buy(){
        System.out.println("ordersDao...");
    }
}

package cn.itcast.xmlanno;

import javax.annotation.Resource;

public class BookService {

    //得到bookDao和odersDao对象
    @Resource(name = "bookDao")
    private BookDao bookDao;

    @Resource(name = "ordersDao")
    private OrdersDao ordersDao;

    public void add(){
        System.out.println("bookService...");
        bookDao.book();
        ordersDao.buy();
    }
}

2.创建配置文件

<?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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启注解扫描 -->
    <context:component-scan base-package="cn.itcast"></context:component-scan>

    <!-- 配置对象 -->
    <bean id="bookService" class="cn.itcast.xmlanno.BookService"></bean>
    <bean id="bookDao" class="cn.itcast.xmlanno.BookDao"></bean>
    <bean id="ordersDao" class="cn.itcast.xmlanno.OrdersDao"></bean>


</beans>

测试类及方法

package cn.itcast.anno;

import cn.itcast.aop.Book;
import cn.itcast.xmlanno.BookService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAnno {
	@Test
    public void testBookService() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");

        BookService bookService = (BookService) context.getBean("bookService");

        System.out.println(bookService);
        bookService.add();
    }
}

注解创建对象与属性总结

创建对象的四个注解
@Component    //通用
@Controller   //web层中使用
@Service   //业务层
@Repository //持久层

创建属性的两个注解

1.使用 @Autowired 注解进行自动装配,不需要指定要注入的对象的value值,自动的根据类名去寻找对应的类来创建对象并进行对象属性的注入。

2.使用 @Resource(name=”userDao”),需要指定需要创建的对象的名字,这里的name对应@Component注解中的value的值,使用这个注解能够根据我们所指定的对象名准确创建出我们所需要的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值