Spring5_IOC操作管理(基于注解方式)

1.什么是注解

1.注解是代码特殊标记格式,  @注解名称(属性名=属性值,属性名=属性值)

2.使用注解,注解在类,方法,属性上面

3.使用注解为了简化xml配置

2.Spring针对bean管理中创建对象提供注解

a)@Componten

b)@Service

c)@Controller

d)@Repository

4中注解的功能都一样,都可以用来创建bean实例

3.基于注解的方式创建对象

1.引入依赖Spring-aop-3.2.6-ReleSae

2.开启组件扫描(只有开启后才知道去哪个包找注解)

a)配置文件中引入命名空间

<?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>

b)组件扫描,个包之间中,号分割,也可以是扫描上层目录,加载配置文件时候就扫描

 <context:component-scan base-package="Spring04"></context:component-scan>

c)创建类,在类上面添加注解(上面四个注解都可以)

import org.springframework.stereotype.Component;

@Component(value = "userService")
//注解中value值可以省略,默认为类名的首字母大写
public class UserService {
    public void add(){
        System.out.println("UserService add...");
    }
}

d)测试

 @Test
    public void test1(){
        ApplicationContext context=new ClassPathXmlApplicationContext("bean4.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.add();
    }

4.开启组件扫描的细节问题

a)不全扫描只扫描包含Controller

1.引入命名空间

2.写Spring配置文件

<!--use-default-filters="false",扫描方式不使用默认都扫描,执行有条件扫描-->
        <!--context:include(包含)-filter type="annotation" expression="org.springframework.stereotype.Controller"
        ,扫描方式按照注解扫描,只扫描包含Controller-->
        <context:component-scan base-package="Spring04" use-default-filters="false">
                <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>

b)不全扫描只扫描不包含Controller

1.引入命名空间

2.写Spring配置文件

<!--use-default-filters="false",扫描方式不使用默认都扫描,执行有条件扫描-->
        <!--context:exclude(不包含)-filter type="annotation" expression="org.springframework.stereotype.Controller"
        ,扫描方式按照注解扫描,只扫描不包含Controller-->
        <context:component-scan base-package="Spring04" use-default-filters="false">
                <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>

 5.基于注解的方式实现属性注入

a)@Autowired                根据属性类型进行注入

b)@Qualifier                  根据属性名称进行注入

c)@Resource                既可以根据属性类型注入也可以根据属性名进行注入

d)@Value                       注入普通类的属性

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

第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解

第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解

import org.springframework.stereotype.Service;

@Service
public interface UserDao {
    public void update();
}



import org.springframework.stereotype.Service;

@Service(value = "UserDaoImpl1")
public class UserDaoImpl implements UserDao{

    @Override
    public void update() {
        System.out.println("UserDao update...");
    }
}



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

@Service
public class UserServices {
    //定义 dao 类型属性
    //不需要添加 set 方法
    //添加注入属性注解
    @Autowired
    private UserDao userDao;

    public void Update(){
        System.out.println("UserService Update ...");
        userDao.update();
    }
}
<context:component-scan base-package="Spring04"></context:component-scan>
 @Test
    public void test2(){
        ApplicationContext context=new ClassPathXmlApplicationContext("bean4.xml");
        UserServices userServices = context.getBean("userServices", UserServices.class);
        userServices.Update();
    }

(2)@Qualifier:根据名称进行注入,这个@Qualifier 注解的使用,和上面@Autowired 一起使用

(由于一个接口有多个实现类,为了保证实现类对应引入@Qualifier注解)

@Service
public class UserServices {
    @Autowired
    @Qualifier(value = "UserDaoImpl1")
    private UserDao userDao;

    public void Update(){
        System.out.println("UserService Update ...");
        userDao.update();
    }
}

3)@Resource:可以根据类型注入,也可以根据名称注入(它属于javax包下的注解,不推荐使用!)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserServices {
    //@Resource               //根据属性类型进行注入
    @Resource(name = "UserDaoImpl1")         //根据属性名进行注入
    private UserDao userDao;

    public void Update(){
        System.out.println("UserService Update ...");
        userDao.update();
    }
}

(4)@Value:注入普通类型属性

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserServices {
    //@Resource               //根据属性类型进行注入
    @Resource(name = "UserDaoImpl1")         //根据属性名进行注入
    private UserDao userDao;
    @Value("abc")
    private String str;
    

    public void Update(){
        System.out.println("UserService Update ...");
        userDao.update();
        System.out.println(str);
    }
}

6.完全注解开发

(1)创建配置类,替代 xml 配置文件,类上面加注解@Configuration,@ComponentScan(basePackages = {"Spring04"})修改需要扫描的类

@Configuration      //作为配置类代替xml
@ComponentScan(basePackages = {"Spring04"})   //开启组件扫秒
public class XmlConfiguration {
}

(2)

import org.springframework.stereotype.Service;

@Service
public interface UserDao {
    public void update();
}



import org.springframework.stereotype.Service;

@Service(value = "UserDaoImpl1")
public class UserDaoImpl implements UserDao{

    @Override
    public void update() {
        System.out.println("UserDao update...");
    }
}





import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserServices {
    //@Resource               //根据属性类型进行注入
    @Resource(name = "UserDaoImpl1")         //根据属性名进行注入
    private UserDao userDao;
    @Value("abc")
    private String str;


    public void Update(){
        System.out.println("UserService Update ...");
        userDao.update();
        System.out.println(str);
    }
}

(3)编写测试类

@Test
    public void test3(){
        ApplicationContext context=new AnnotationConfigApplicationContext(XmlConfiguration.class);
        UserServices userServices = context.getBean("userServices", UserServices.class);
        userServices.Update();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值