美文网首页
spring三种配置方式(注解、配置文件、javaConfig)

spring三种配置方式(注解、配置文件、javaConfig)

作者: 晓晓_1931 | 来源:发表于2022-12-18 12:35 被阅读0次

一、配置文件方式

-------------------------------------配置文件方式---------------------------------------

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                        https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xx</groupId>
    <artifactId>springTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <properties>
        <!-- spring 版本号 -->
        <spring.version>5.2.8.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!-- 此依赖会关联引用Spring中的所有基础jar包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</project>
创建实体类
package com.xx.po;

public class User {
        private Integer id;
        private String name;
        public User(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
     }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
         return name;
        }
        public void setName(String name) {
         this.name = name;
        }
        @Override
        public String toString() {
         return "User [id=" + id + ", name=" + name + "]";
        } 
}
创建dao接口与实现类
package com.xx.dao;
import com.xx.po.User;
public interface UserDao {
    public User getUser();
}
package com.xx.dao.impl;
import com.xx.dao.UserDao;
import com.xx.po.User;
public class UserDaoImpl implements UserDao{
    @Override
    public User getUser() {
        return new User(1,"test");
    }
}
创建service接口与实现类
package com.xx.service;
import com.xx.po.User;
public interface UserService {
    public User getUser();
}
package com.xx.service.impl;
import com.xx.dao.UserDao;
import com.xx.po.User;
import com.xx.service.UserService;
public class UserServiceImpl implements UserService{
    private UserDao userDao;
    @Override
    public User getUser() {
        return userDao.getUser();
    }
    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}
在类路径下创建spring.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:aop="http://www.springframework.org/schema/aop"
    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
                    http://www.springframework.org/schema/aop 
                    http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">
    <bean id="userDao" class="com.xx.dao.impl.UserDaoImpl"></bean>
    <bean id="userService" class="com.xx.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>

Spring配置文件就相当于一个容器。此容器中负责创建对象,并实现对象与对象之间的装配。
java中每一个类都是一个bean。所以上面的bean标签,就是在容器中创建一个java对象。
bean标签中的class属性,就是类名; id属性,就是对象名。
property标签,是给bean的属性注入其它对象。name属性,就是对象属性名; ref属性,就是给属性注入的对象。(如果想要注入基本数据类型,那么使用value属性)
给bean的属性注入其它对象,默认使用 get/set 方法注入。也可以使用其它方式注入:构造方法注入、P命名空间注入等。

测试类
package com.xx;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xx.po.User;
import com.xx.service.UserService;
public class MySpringTest {
    public static void main(String[] args) {
        //读取Spring配置文件,获取Spring容器
        ApplicationContext context = new  ClassPathXmlApplicationContext("spring.xml");
        //通过Spring容器的getBean方法获得对象
        UserService service = (UserService)context.getBean("userService");
        User user = service.getUser();
        System.out.println(user);
    }
}

------------------------------------- 配置文件方式--------------------------------------

二、注解方式

-------------------------------------注解方式--------------------------------------------
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                        https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xx</groupId>
    <artifactId>springTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <properties>
        <!-- spring 版本号 -->
        <spring.version>5.2.8.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!-- 此依赖会关联引用Spring中的所有基础jar包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</project>
创建实体类
package com.xx.po;

public class User {
        private Integer id;
        private String name;
        public User(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
     }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
         return name;
        }
        public void setName(String name) {
         this.name = name;
        }
        @Override
        public String toString() {
         return "User [id=" + id + ", name=" + name + "]";
        } 
}
创建dao接口与实现类
package com.xx.dao;
import com.xx.po.User;
public interface UserDao {
    public User getUser();
}
package com.xx.dao.impl;
import org.springframework.stereotype.Repository; 
import com.xx.dao.UserDao;
import com.xx.po.User;
//@Component
@Repository   //不起名字就默认类名首字母小写userDaoImpl
public class UserDaoImpl implements UserDao{
    public User getUser() {
        return new User(1,"test");
    }
}

创建service接口与实现类

package com.xx.service;
import com.xx.po.User;
public interface UserService {
    public User getUser();
}
package com.xx.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.xx.dao.UserDao;
import com.xx.po.User;
import com.xx.service.UserService;
//@Component("userService")
@Service("userService")
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDao userDao;
    
     //注意:UserDao属性自动注入,所以就可以不用get/set方法了
   
    public User getUser() {
        return userDao.getUser();
    }
  
}
在类路径下创建spring.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:aop="http://www.springframework.org/schema/aop"
    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
                    http://www.springframework.org/schema/aop 
                    http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">
    <!--开启注解扫描,设置需要扫描的包  -->
    <context:component-scan base-package="com.xx"/>
</beans>
测试类
package com.xx;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xx.po.User;
import com.xx.service.UserService;
public class MySpringTest {
    public static void main(String[] args) {
        //读取Spring配置文件,获取Spring容器
        ApplicationContext context = new  ClassPathXmlApplicationContext("spring.xml");
        //通过Spring容器的getBean方法获得对象
        UserService service = (UserService)context.getBean("userService");
        User user = service.getUser();
        System.out.println(user);
    }
}

-------------------------------------注解方式--------------------------------------------

三、javaConfig方式

-------------------------------------javaConfig方式-------------------------------------

javaConfig,是在 Spring 3.0 开始从一个独立的项目并入到 Spring 中的。javaConfig 可以看成一个用于完成 Bean 装配的 Spring 配置文件,即 Spring 容器,只不过该容器不是 XML文件,而是由程序员使用 java 自己编写的 java 类。
一个类中只要标注了@Configuration注解,这个类就可以为spring容器提供Bean定义的信息了,或者说这个类就成为一个spring容器了。
标注了@Configuration和标注了@Component的类一样是一个Bean,可以被Spring的 context:component-scan 标签扫描到。类中的每个标注了@Bean的方法都相当于提供了一个Bean的定义信息。

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                        https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xx</groupId>
    <artifactId>springTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <properties>
        <!-- spring 版本号 -->
        <spring.version>5.2.8.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!-- 此依赖会关联引用Spring中的所有基础jar包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</project>
创建实体类
package com.xx.po;

public class User {
        private Integer id;
        private String name;
        public User(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
     }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
         return name;
        }
        public void setName(String name) {
         this.name = name;
        }
        @Override
        public String toString() {
         return "User [id=" + id + ", name=" + name + "]";
        } 
}
创建dao接口与实现类
package com.xx.dao;
import com.xx.po.User;
public interface UserDao {
    public User getUser();
}
package com.xx.dao.impl;
import com.xx.dao.UserDao;
import com.xx.po.User;
public class UserDaoImpl implements UserDao{
    @Override
    public User getUser() {
        return new User(1,"test");
    }
}
创建service接口与实现类
package com.xx.service;
import com.xx.po.User;
public interface UserService {
    public User getUser();
}
package com.xx.service.impl;
import com.xx.dao.UserDao;
import com.xx.po.User;
import com.xx.service.UserService;
public class UserServiceImpl implements UserService{
    private UserDao userDao;
    @Override
    public User getUser() {
        return userDao.getUser();
    }
    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}
spring.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:aop="http://www.springframework.org/schema/aop"
    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
                    http://www.springframework.org/schema/aop 
                    http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">
    <!--开启注解扫描,设置需要扫描的包  -->
    <context:component-scan base-package="com.xx"/>
</beans>
创建javaConfig类
package com.xx;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.xx.dao.UserDao;
import com.xx.dao.impl.UserDaoImpl;
import com.xx.service.UserService;
import com.xx.service.impl.UserServiceImpl;
@Configuration
public class AppConfig {
    @Bean
    public UserDao userDao() {
        return new UserDaoImpl();
    }
    @Bean
    public UserService userService() {
        //这里不能声明接口类型
        UserServiceImpl userService = new UserServiceImpl();
        //配置依赖关系(需要set方法)
        userService.setUserDao(userDao());
        return userService;
    }
}
测试
package com.xx;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xx.po.User;
import com.xx.service.UserService;

public class Test {

    public static void main(String[] args) {
        ApplicationContext context = new  ClassPathXmlApplicationContext("spring.xml");
        UserService service = (UserService)context.getBean("userService");
        User user = service.getUser();
        System.out.println(user);
    } 
}

-------------------------------------javaConfig方式-------------------------------------------------

相关文章

网友评论

      本文标题:spring三种配置方式(注解、配置文件、javaConfig)

      本文链接:https://www.haomeiwen.com/subject/vjkeqdtx.html