Spring注解方式
Spring注解方式
xml与注解合用
xml配置
<content:component-scan base-package="com.hello"/>
扫描back-package下的所有类对象
类注解
根据三层架构原则,spring定义了不同的注解,名称不同,但业务一样。
@Repository :持久层注解(注:当使用mybatis是使用mybatis本身的注解)
@Service :服务层注解
@controller:表现层注解
@Component:其他(不属于任何层,但需要加入到spring容器中是采用)注解
使用
在导入配置文件过后,使用Autowired注解自动注入
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application.xml")
public class AppTest 
{
    @Autowired
    public UserService service;
    @Autowired
    public UserMapper mapper;
    @Test
    public void test1(){
        System.out.println(service);
        System.out.println(mapper);
    }
}
@Autowired注解
Autowired首先会按照类型去寻找根据找到的匹配对象分为三种情况:
1、未找到,默认报错
2、找到一个,注解注入
3、找到多个,再按名字寻找,若没有匹配,则报错,也可使用Qualifier("id")类型去找(注入接口,接口有多个实现类时,存在注入匹配到多个对象)
Autowired有一个require属性,默认true,当为true则必须注入对象,若为false,则有时注入,无时不管。
@Qualifier注解
在对类的类注解中设置id值
例:@Repository("id")
在Autowired的注解后可使用@Qualifier("id"),设置注入类的id,更进一步的精确注入对象。
@Primary注解
设置在类注解上,如:
@Service
@Primary
public class UserServiceImpl implements UserService {
}
在Autowired注解注入时,单或者多个时,默认注入带有Primary注解的类。
@Resource
Resource注解是jdk提供的注解,优先按照id属性注入,没有匹配,再按照类型注入,找到多个时会报错,不具备Autowired的require属性,不支持Primary注解。
纯注解
配置配置类
xml文件被配置类代替
配置类要配置两个注解,如:
@ComponentScan(basePackages = "com.hello")
@Configuration
public class UserConfig {
}
@ComponentScan(basePackages = "com.hello") 作用如
<content:component-scan base-package="com.hello"/>
@Configuration 注解表示当前类时spring的一个配置类。
注解这两个类后,这个配置类就可以看成一个xml文件。
javabean放入spring容器
如下,有两个Javabean类
public class Admin {
    private User user;
}
public class User {
}
@Component注解只能无参构造
若需要为对象属性赋值,可在config配置文件中如下配置
基本数据类型:
@Bean()
public User user(){
    return new User("12");
}
获取的User对象就是new User(“12”)
应用数据类型:
1、
@Bean
public Admin admin(){
    Admin admin = new Admin();
    admin.setUser(user());
    return admin;
}
直接调用setter方法设置属性值。
2、
@Bean
public Admin admin(User user){
    Admin admin = new Admin();
    admin.setUser(user);
    return admin;
}
传入的参数会自动的注入值
注:方法名就相当于xml文件bean标签中的id
单多例设置scope
单例,scope设置为singleton
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_SINGLETON)
@Bean()
public User user(){
    return new User("12");
}
多例,scope设置为prototype
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Bean()
public User user(){
    return new User("12");
}
获取bean
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {UserConfig.class})
public class SpringTest {
    @Autowired
    public UserMapper user;
    @Test
    public void test(){
        System.out.println(user);
    }
}
测试类中的
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application.xml")
换成了
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {UserConfig.class})

                
            
        
浙公网安备 33010602011771号