基于注解的IOC配置

发布时间:2024年01月04日

什么是IOC注解

????????学习基于注解的IOC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。

常用注解

添加pom.xml依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
    </dependencies>

?resources配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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 ">
    <!--
        告诉spring,容器启动时要扫描的包,且spring会依据注解创建对象并存到IOC容器中
    -->
   <context:component-scan base-package="com.by"></context:component-scan>
</beans>

用于创建对象的

@Controller
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于表现层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

@Service
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于业务层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

案例

//@Service("userServiceImpl")//Map<userServiceImpl,new UserServiceImpl()>
@Service//默认使用实现类类名首字母小写
public class UserServiceImpl implements UserService {
            ... ...
}
@Repository
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;一般用于持久层。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

//@Repository("userServiceImpl")//Map<userServiceImpl,new UserServiceImpl()>
@Repository//默认使用实现类类名首字母小写
public class UserDaoImpl implements UserDao {
        ... ....
}
@ Component
  • 作用:

    把资源交给spring来管理,相当于:<bean id="" class="">;通用。

  • 属性:

    value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

@Scope
  • 作用:

    指定bean的作用域范围。

  • 属性:

    value:指定范围的值,singleton prototype request session。

用于属性注入的

@Autowired
  • 作用:

    自动按照类型注入。set方法可以省略。

  • 案例:

@Service
public class UserServiceImpl implements UserService {

    @Autowired //注入类型为UserDAO的bean
    private UserDao userDao;

    public void addUser(){
        userDao.addUser();
    }
}
@Resource
  • 作用:

    自动按照名字注入。set方法可以省略。

  • 属性:

name:指定bean的id。

  • 案例:

@Service
public class UserServiceImpl implements UserService {

    @Resource(name="userDaoImpl")//注入id=“userDaoImpl”的bean
    private UserDao userDao;

    public void addUser(){
        userDao.addUser();
    }
}
@Value
  • 作用:

    注入基本数据类型和String类型数据的

  • 属性:

value:用于指定值

@Value案例一

@Service
public class UserServiceImpl implements UserService {

    @Resource(name="userDaoImpl") //注入id=“userDaoImpl”的bean
    private UserDao userDao;
    @Value("张三")//注入String
    private String name;
    @Value("18")//注入Integer
    private Integer age;

    public void addUser(){
        System.out.println(name+","+age);
        userDao.addUser();
    }
}

@Value案例二

创建config.properties

name=张三
age=18

?resources配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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 ">
    <!--加载config.properties配置文件,并把配置文件中的数据存到IOC容器中-->
    <context:property-placeholder location="config.properties"/>
<!--
        告诉spring,容器启动时要扫描的包,且spring会依据注解创建对象并存到IOC容器中
    -->
    <context:component-scan base-package="com.by"></context:component-scan>
</beans>

注入属性值

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    @Value("${name}")//注入String
    private String name;
    @Value("${age}")//注入Integer
    private Integer age;

    public void addUser() {
        System.out.println(name+","+age);
        userDao.addUser();
    }
}

文章来源:https://blog.csdn.net/m0_74007708/article/details/135393526
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。