Spring使用注解的方式创建对象和依赖注入

导入jar包,引入约束

<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="annotation"></context:component-scan>

如果有多个包,可以导入多个

<!--开启注解扫描-->
    <context:component-scan base-package="annotation,XmlTest"></context:component-scan>

或者直接写包前缀

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

注解方式创建对象

在类的上面添加注解:

@Component(value = "user")    //等价于<bean id="user" class="User"></bean>
public class User {
    public void add() {
        System.out.println("add........");
    }
}

注解方式测试:

@Test
    public void testUser() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        User user = (User) context.getBean("user");
        System.out.println(user);
        user.add();
    }

在这里插入图片描述
创建对象有四个注解:
在这里插入图片描述
这四个注解的功能是一样的,都用来创建对象
在配置文件中仍然只有一行

默认为单例模式:
如果想要创建多实例:

@Component(value = "user")    //等价于<bean id="user" class="User"></bean>
@Scope(value = "prototype")    //默认单实例,创建多实例
public class User {
    public void add() {
        System.out.println("add........");
    }
}

注解方式注入属性

  1. 创建Service类和dao类
  2. 在Service里面注入dao类对象

配置文件的写法:

    <bean id="dao" class="ioc.UserDao"></bean>
    <bean id="service" class="ioc.UserService">
        <!--不要写value,因为不是字符串,写bean标签中id的值-->
        <property name="userDao" ref="dao"></property>
    </bean>

现在不需要这么麻烦了。

仍然是首先创建Bean对象。value属性值可以省略

import org.springframework.stereotype.Component;

@Component("service")
public class UserService {
    public void add() {
        System.out.println("UserService......");
    }
}
@Component(value = "dao")
public class UserDao {
    public void add() {
        System.out.println("UserDao.....");
    }
}
第一个注解:Autowired

在Service里面定义Dao属性,使用注解方式不需要set方法,在dao属性上面使用注解,完成对象注入

@Component("service")
public class UserService {

    //@Autowired自动注入
    @Autowired
    UserDao userDao;
    public void add() {
        userDao.add();
        System.out.println("UserService......");
    }
}

在这里插入图片描述
跟bean的id无关,自动装备是根据UserDao这个类型类进行寻找的

第二个注解(用的最多)
@Component("service")
public class UserService {

    //@Autowired自动注入
//    @Autowired
//    UserDao userDao;
    @Resource(name="dao")
    UserDao userDao;
    public void add() {
        userDao.add();
        System.out.println("UserService......");
    }
}

配置文件和注解方式的混合使用

  1. 创建对象的方式使用配置文件的方式
  2. 注入属性的操作使用注解的方式实现
package xmlanno;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

public class BookService {
    //得到bookDao和OrdersDao对象
    @Resource("bookDao")
    private BookDao bookDao;
    
    @Resource("ordersDao")
    private OrdersDao ordersDao;

    @Test
    public void add() {
        System.out.println("service...");
    }
}
<?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="xmlanno"></context:component-scan>

    <!--配置对象-->
    <bean id="bookService" class="xmlanno.BookService"></bean>
    <bean id="bookDao" class="xmlanno.BookDao"></bean>
    <bean id="ordersDao" class="xmlanno.OrdersDao"></bean>
</beans>
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值