Spring注解开发

配置bean

在类的上方一个注解: @Component ,就表示配置了该类

@Component("该类的名称,可以省略不写")
public class DaoImpl implements Dao {
	public void show(){
	}
}

在xml配置文件中,添加扫描注解的配置

# base-package表示要扫描的包
<context:component-scan base-package="com.fyislo"/>
  • Spring提供了@Component注解的三个衍生注解
    • @Controller:用于表现层的bean定义
    • @Service:用于业务层bean定义
    • @Repository:用于数据层bean定义

纯注解开发

  • Spring3.0开启了纯注解开发模式,使用Java类替代了配置文件,开启了Spring快速快发赛道。
  • Java类代替Spring核心配置文件

给类加上一个 @Configuration 表示这是一个配置类

@Configuration//表示这是一个配置类  
@ComponentScan("com.dao")   //配置扫描注解,指定要扫描的包
public class SpringConfig {}

# 加载配置类初始化容器
ApplicationContext ctx = new 	AnnotationConfigApplicationContext(配置类的字节码文件);

# 加载配置文件初始化容器
ApplicationContext ctx2 = new ClassPathXmlApplicationContext("配置文件");
  • @Configuration 注解用于设定当前类为配置类
  • @ComponentScan 注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式: @ComponentScan({"com.dao","com.service"})

bean管理

在类加上 @Scope("prototype") 注解,即可更换为非单例模式

  • scoper
    • singleton:单例(默认)
    • prototype:非单例

在类的方法上加上 @PostConstruct@PreDestroy 注解,即可控制bean的生命周期

@Component("bookDao")  
@Scope("prototype")//指定该类为非单例模式
public class BookDaoImpl implements BookDao {
	@PostConstruct//构造方法后运行
	public void init(){}

	@PreDestroy//销毁前运行
	public void destroy(){}
}

依赖注入

引用类型注入

使用 @Autowired 注解,便可以自动注入属性。按类型注入。

在自动装配的情况下,使用 @Qualifier("指定的名称") ,可以指定它加载对应的变量名称。

@Service  
public class BookServiecImpl implements BookService {  
    @Autowired  
    @Qualifier("bookDao")  
    private BookDao bookDao;  
}
  • 注意: @Qualifier 注意配合 @Autowired 运行
  • 注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
  • 注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法

简单类型的注入

在属性上加 @Value("数据") 注解,即可完成简单类型的注入

@Value("zhangsan123")
private String name;

在配置类加载properties的配置文件

@Configuration//表示这是一个配置类  
@ComponentScan("com.fyislo")//配置扫描注解  
@PropertySource("jdbc.properties")//加载properties的配置文件  
public class SpringConfig {}

# 此时@Value就可以使用${}引用properties的配置文件中的数据了
@Value("${name}")
prviate String name;

注意: @PropertySource() 不支持使用通配符*

第三方bean管理

在配置类中定义一个方法,获得要管理的对象,在此方法上加上 @Bean 注解即可。

1、可以使用一个专门管理bean的配置类,只需要的另一个配置类中用 @Impoet 注解导入另一个配置类即可。(推荐)

@Configuration//表示这是一个配置类
@Import({JdbcConfig.class})//导入另一个配置类
public class SpringConfig {}

@Configuration//表示这是一个配置类  
public class JdbcConfig {  
    @Bean
    public DataSource dataSource() {  
    	DruidDataSource ds = new DruidDataSource();
    	ds.setDriverClassName("");
    	ds.setUr1("");
    	ds.setUsername("");
    	ds.setPassword("");
    	//......其它配置
        return ds; 
    }  
}

2、也可以使用 @ComponentScan 注解将独立的配置类加入到核心配置(不推荐)

@Configuration//表示这是一个配置类
@ComponentScan({"com.config","con.data"})//扫描配置类所在的包即可
public class SpringConfig {}

@Configuration//表示这是一个配置类  
public class JdbcConfig {  
    @Bean
    public DataSource dataSource() {  
    	DruidDataSource ds = new DruidDataSource();
    	//......其它配置
        return ds; 
    }  
}
  • 当我们配置类需要依赖其它类的时候
    • 简单类型可以使用 @Value 注解来获得简单类型的注入
    • 引用类型可以直接在形参上写入即可获得相应的类
@Configuration//表示这是一个配置类  
public class JdbcConfig {
	@Value("zhangsan")
	private String userName;
	@Value("123")
	private String passWord;
    @Bean
    public DataSource dataSource(Dao dao) {//在形参的位置写入需要的其它类即可,容器会根据类型自动装配
    	DruidDataSource ds = new DruidDataSource();
    	ds.setUsername(userName);
    	ds.setPassword(passWord);
    	//......其它配置
    	System.out.println(dao);//此时便可直接使用
        return ds; 
    }  
}

注解开发总结

xml配置对比注解配置

image.png

posted @   不柴  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示