[学习笔记] Spring之Spring配置补充

# 学习 # · 2021-02-10

Spring中Bean的作用域问题

1、Bean的作用域:

(1)singleton:默认值,以单例模式创建Bean的实例,即容器中该Bean的实例只有一个。

(2)prototype:每次从容器中获取Bean时,都会创建一个新的实例。

(3)request:用于Web应用环境,针对每次HTTP请求都会创建一个实例。

(4)session:用于Web应用环境,同一个会话共享同一个实例,不同的会话使用不同的实例。

(5)global session:仅在Portlet的Web应用中使用,同一个全局会话共享一个实例。对于非PortLet环境,等同于session。

2、使用注解指定Bean的作用域:

@Scope("property")
@Service("userService")
public class UserServiceImpl implements UserService {
    // 省略其他代码
}

使用注解定义bean

1、使用注解定义Bean:

/**
 * 用户DAO类,实现UserDao接口,负责User类的持久化操作
 */
@Component("userDao")
public class UserDaoImpl implements UserDao {

    public void save(User user) {
        System.out.println("保存用户信息到数据库");
    }
}

(1)通过注解@Component("userDao")定义了一个名为userDao的Bean(实现了Bean组件定义),其作用与在XML配置文件中编写<bean id="userDao" class="dao.impl.UserDaoImpl" />等效。

(2)@Repository注解:用于标注DAO类。

(3)@Service注解:用于标注业务类。

(4)@Controller注解:用于标注控制器类。


使用Java的方式配置Spring(不使用XML)

1、JavaConfig:是Spring的一个子项目,在Spring4之后成为一个核心。

2、实现步骤一:创建一个持久化类User。

@Component
public class User {
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
   
    @Value("小红")
    private String name;

    public void say() {
        System.out.println("你好,我叫" + name);
    }
}

(1)@Component注解:说明这个类被Spring接管,注册到了容器中。

(2)@Value注解:属性注入值。

3、实现步骤二:创建一个Spring配置类。

@Configuration
public class MyConfig {

    @Bean
    public User getUser() {
        return new User();
    }
}

(1)@Configuration注解:说明这个类被被Spring容器接管,注册到容器中,因为它本来就是一个@Component

(2)@Configuration代表这是一个配置类,类似于applicationContext.xml配置文件。

(3)@Bean注解:表示注册一个Bean,相当于配置文件中的bean标签。其中bean的id=方法中的名字,方法的返回值=bean的class属性。

(4)getUser()放啊返回要注入到bean的对象。


拆分Spring配置文件

1、对于使用XML方式进行配置的Spring项目,项目规模较大时,配置文件可读性、可维护性差,庞大的Spring配置文件难以阅读,建议将一个大的配置文件拆分成多个小的配置文件。

2、拆分方法:如果有多个配置文件需要载入,可以分别传入多个配置文件名,或以String[]方式传入多个配置文件名。

//方式一
ApplicationContext ctx = new ClassPathXmlApplicationContext(
    "applicationContext.xml",
    "applicationContext-dao.xml",
    "applicationContext-service.xml");

//方式二
String[] configs = {"applicationContext.xml",
                    "applicationContext-dao.xml",
                    "applicationContext-service.xml"};
ApplicationContext ctx = new ClassPathXmlApplicationContext(configs);

//方式三:采用通配符
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext*.xml");
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/217/

评论