spring 扫描 spring 扫描指定注解方法_jar包

基于注解方式创建对象:

第一步:引入依赖的jar包(使用maven后只需要再pom中写依赖的jar包坐标即可。)

第二步:配置文件中开启注解扫描:

注意,(1)如果扫描多个包,多个包之间使用逗号隔开.

(2)如果包层目录写到半路,表示扫描当前包下所有目录。

spring 扫描 spring 扫描指定注解方法_注解方式_02


组件扫描的细节配置(可以精确控制哪些需要扫描,哪些排除):

1.因为已经指定use-default-filters="false"不使用默认的filters,默认filters为全部的注解包括了@Controller、@Service等,所以默认情况下只要没有显示指定为不使用默认的filers.context:component-scan base-package指定的扫描器都会对相应的注解进行扫描。因此可以说use-default-filters="false"属性是专门和context:include-filter子标签一起使用,这样可以更加自由地指定哪些注解由扫描器扫描。其意思相当于:只扫描@xxx注解的标志的类。

2.如果不写use-default-filters属性的话,默认扫描所有,然后可以再用exclude设置哪些注解不需要扫描。

spring 扫描 spring 扫描指定注解方法_spring 扫描_03

第三步:编写类(类上使用注解):

注意:
@Service注解是标注在实现类上的,因为@Service是把spring容器中的bean进行实例化,也就是等同于new操作,只有实现类是可以进行new实例化的,而接口则不能,所以是加在实现类上的

service接口:

package com.fan.service;


import org.springframework.stereotype.Service;

//此类只是掩饰注解方式创建类的对象
/*
在注解里面value属性可以省略不写,
默认其等号右边的值是首字母小写的类名称
UserService-->userService
* */

public interface UserService {
    public void add();
}

service的实现类:

package com.fan.service.impl;

import com.fan.dao.UserDao;
import com.fan.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(value = "userServiceImplx")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void add() {
        System.out.println("service的add方法");
        //userDao.add();//调用接口的方法
    }
}

spring 扫描 spring 扫描指定注解方法_注解方式_04


第四步:测试,获取对象

package testspring.java;


import com.fan.service.UserService;
import com.fan.service.impl.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBean {
    @Test
    public void test01(){
        //加载配置文件
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("spring2.xml");
        /*通过配置文件获取对象,(可以认为类上有了注解,就相当于在xml定义了bean,
         然后bean的id类上注解后的value的值。
         我们就可以根据bean的id,即注解上的value值来获取该类的一个对象)*/
        UserService userService = context.getBean("userServiceImplx", UserService.class);
        userService.add();

    }
}

利用注解获取类的对象的理解:

spring 扫描 spring 扫描指定注解方法_spring_05

out目录存放的是该项目下所有Module(模块)的编译结果。
target目录存放的是单个Module的编译结果。
如果为某个Module指定了编译结果的路径,则不会再输出到out文件夹中了。
你在Project Structure中的Project选项卡中可以设置Project compiler output的目录。
在Modules中选择某一个模块后,在右侧的Paths选项卡中可以设置该模块的Compiler output目录。

基于注解方式实现属性注入:

(1)@Autowired:根据属性类型进行自动装配

(2)@Qualifier:根据属性名称进行注入(Qualifier和上面的Autowired必须一起使用)
代码:

@Autowired
 @Qualifier(value = “userDaoImpl”)//根据名称进行注入
 private UserDao userDao;(3)@Resurce:可以根据类型注入,也可以根据名称注入。(@Resurce是tomcat自带的注解)
 用法一:@Resource//单独写一个@Resource,是根据类型进行注入
 private UserDao userDao;
 用法二://容器内注入dao
 @Resource(name = “userDao”)//根据类上面的 @Repository(“userDao”) userDao的 名称进行注入
 private UserDao userDao;(4)@Value:注入普通类型属性
 @Value(“张三”)//功能和对象.setName(“张三”)一样
 private String name;

总结:不包含maven的spring缺点很多,特别是jar包需要自己手动导入,特别麻烦,还可能产生冲突。比如之前项目导入jar。是通过copy方式导入项目中,而且还会存在jar之间的依赖和冲突。而maven解决了这些问题,不再需要来回复制jar包了,解放了我们的双手。