【Spring框架】基于注解方式实现属性注入,纯注解开发

本文介绍了在Spring中如何使用注解配置创建service和dao对象,包括在接口和实现类上的注解使用,以及在Service中通过@Autowired和@Qualifier进行依赖注入。还展示了XML配置文件的组件扫描和测试类的编写。在遇到问题时,提到了类名命名规范对编译成功的影响,并展示了如何用@Configuration和@ComponentScan替代XML配置。
摘要由CSDN通过智能技术生成

1.把service和dao对象创建,并在类中添加创建对象的注解

//接口:UserDao
public interface UserDao {
    public void add();
}
//接口实现类
@Repository(value = "userDaoImpl1")
//根据名称注入
//@Component,@Controller,@Service 都可以,这里为了和其他地方区别开

public class UserDaoImpl implements UserDao {
    @Override
    public void add() {
        System.out.println("dao add...");
    }
}

2.在Service里面注入Dao对象,在service类添加dao类型属性,在属性上面使用注解

@Service
//@Component,@Controller,@Repository 都可以

public class UserService {

    //定义dao类型属性
    //不需要添加set方法
    //添加注入属性注解

    @Autowired  //根据类型进行注入
    @Qualifier(value = "userDaoImpl1")
    //上面两行可以用@Resourse(name="userDaoImpl1")替代
    private UserDao userDao;

    public void add(){
        System.out.println("service add...");
        userDao.add();
    }
}

xml配置文件:

 <!--开启组件扫描
        1 如果扫描多个包,多个包使用逗号隔开
        2 扫描包上层目录
    -->
    <context:component-scan base-package="ysy1_spring5.service,ysy1_spring5.dao"></context:component-scan>

测试类:

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

结果如下:
在这里插入图片描述
其中遇到了bug:
Exception encountered during context initialization - cancelling refre

原因是导包时,少导入了一个包

@Qualifier(value = "userDaoImpl1")的作用:如果一个接口有多个实现类,可以用名称来找其中指定的类

@Resourse(name="userDaoImpl1")注意是在javax包中,是java的扩展包中,所以不建议用这个

用纯注解开发:
1.创建配置类,替代xml文件
创建一个包,创建一个SpringConfig类

@Configuration //作为配置类,替代xml配置文件
@ComponentScan(basePackages ={"ysy1_spring5"} )//开启组件扫描
public class SpringConfig {

}

2.编写测试类

@Test
        public void testService2(){
            //加载配置类
            ApplicationContext context
                    =new AnnotationConfigApplicationContext(SpringConfig.class);//这里和上面不同
            UserService userService=context.getBean("userService",UserService.class);
            System.out.println(userService);
            userService.add();
        }

遇到了一个bug:一开始类名定义为springConfig,编译一直说是NoSuchBeanDefinitionException: No bean named ‘userService’ is defined

但是并没有发现错误

后来我把类名改成SpringConfig后,编译通过,原来是类名没有遵循驼峰命名法
之后我尝试把这个类改成别的小写开头的名字,系统给我自动首字母大写了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知野小兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值